Сценарии с 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"

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

2
задан 7 April 2020 в 23:14
1 ответ

Конечно, вы можете получить желаемую информацию из 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
 сервер IpV4Addr IpTimeMs IpStatus
------ -------- -------- --------
google.com 216.58.201.110 115,6865 Включено
77.75.79.53 77.75.79.53 21,5296 Вкл.
192.168.1.1 192.168.1.1 13,8537 Вкл.
192.168.1.12 1252,0167 Произошла неисправимая ошибка во время ...
bmw.com 3999,3424 Ошибка из-за нехватки ресурсов
160.46.244.131 3999,6292 Ошибка из-за нехватки ресурсов
foo.bar 41,9088 Такой хост не известен

Сбор данных о тестировании исходит из этого моего ответа .

0
ответ дан 10 April 2020 в 14:01

Теги

Похожие вопросы