Назад | Перейти на главную страницу

Сценарии с psinfo - вывод IP и версии программного обеспечения?

Я пытаюсь создать сценарий, который принимает список из нескольких сотен машин, и я хотел бы, чтобы он выводил мне три вещи: IP-адрес, версию VMware и, конечно же, имя компьютера. Я не мог собрать все воедино и подумал, что попрошу о помощи.

Ниже приведены данные, которые выводятся в файл CSV, но я не уверен, как заставить его отображать IP. Я пробовал использовать другой синтаксис с "ping", но сценарий зависает на первой машине и никогда не пройдет мимо него.

for /f %%i in (C:\Temp\Computers.txt) do ( 

   echo Software on %%i >> C:\Temp\psinfovmware15.csv 

   psinfo64 -s \\%%i | find /i "VMware" >> C:\Temp\psinfovmware15.csv 

   echo IP Address on %%i >> C:\Temp\psinfovmware15.csv 

   ping \\%%i >> C:\Temp\psinfovmware15.csv 

) 

excel C:\Temp\psinfovmware15.csv

Кроме того, я нашел этот сценарий PowerShell ниже, который отображает имя компьютера и IP-адрес, но я бы хотел, чтобы он отображал версию VMware:

$servers = Get-Content "computers.txt"
$report = @()
ForEach ($server in $servers) {
  Try {
    $tempreport = New-Object PSObject
    $IP = ((Test-Connection -ea stop -Count 1 -comp $server).IPV4Address).IPAddresstoString
    $tempreport | Add-Member NoteProperty Server $server
    $tempreport | Add-Member NoteProperty Status "Up"
    $tempreport | Add-Member NoteProperty IP $ip
    $report += $tempreport
    } 
  Catch {
    $tempreport = New-Object PSObject
    $tempreport | Add-Member NoteProperty Server $server
    $tempreport | Add-Member NoteProperty Status "Down"    
    }
  }
$report | Export-Csv -NoTypeInformation "report.csv"

Есть идеи о том, как установить тайм-аут, если машина не в сети? Спасибо!

Конечно, вы можете получить желаемую информацию из psinfo64.exe в PowerShell следующим образом:

$psinfo64 = psinfo64.exe -s -nobanner \\$server 2>$Null|
    Where-Object { $_ -match "VMware" }

Следующий сценарий может помочь (извините, я не могу проверить выше psinfo используя мою текущую коллекцию данных тестирования):

$servers = Get-Content -Path 'D:\bat\files\30852528.txt' |
    Where-Object { $_.Substring( 0,1 ) -ne ';' } # refuse comment lines
$report = [System.Collections.ArrayList]::new()
ForEach ($server in $servers) {
    $IpTry = Measure-Command -Expression {
        $IpTest = Test-Connection -ErrorAction SilentlyContinue -Count 1 -ComputerName $server
    }
    if ( $null -eq $IpTest ) {
        $IpStatus = $Error[0].Exception.InnerException.Message
        $psinfo64, $IpV4Addr = [string]::Empty
    } else {

        $IpStatus = 'On'
        if ( $IpTest.Address -eq $IpTest.ProtocolAddress ) {
            $IpV4Addr = $IpTest.ProtocolAddress
        } else {
            $IpV4Addr = $IpTest.IpV4Address.IPAddressToString
        }
        $IpTest.Dispose()
        $psinfo64 = psinfo64.exe -s -nobanner \\$server 2>$Null|
            Where-Object { $_ -match "VMware" }
    }
    $null = $report.Add( 
        [PSCustomObject]@{
            server   = $server;
            IpV4Addr = $IpV4Addr;
            IpTimeMs = $IpTry.TotalMilliseconds;
            IpStatus = $IpStatus;
            psinfo64 = $psinfo64;
        }
    )
}
$report #| Export-Csv -NoTypeInformation "report.csv"

Вывод:

D:\PShell\SF\1011340.ps1
server         IpV4Addr        IpTimeMs IpStatus  
------         --------        -------- --------  
google.com     216.58.201.110  115,6865 On 
77.75.79.53    77.75.79.53      21,5296 On 
192.168.1.1    192.168.1.1      13,8537 On 
192.168.1.12                  1252,0167 A non-recoverable error occurred during...
bmw.com                       3999,3424 Error due to lack of resources
160.46.244.131                3999,6292 Error due to lack of resources
foo.bar                         41,9088 No such host is known

Сбор данных тестирования происходит от это мой ответ.