Как использовать несколько командлетов Test-Connection
и разместить их в одном Out-GridView
, или есть другое решение для того, что я пытаюсь сделать здесь? Суть заключается в том, чтобы иметь возможность пинговать несколько адресов друг за другом и все это отображаться в одном окне.Запуск нескольких тестовых соединений для одного выхода gridview
ответ
фид вашего списка IP-адресов (или имен хостов) в ForEach-Object
петлю под управлением Test-Connection
для каждого адреса, а затем трубы результат в Out-GridView
:
$addr = '192.168.1.13', '192.168.23.42', ...
$addr | ForEach-Object {
Test-Connection $_
} | Out-GridView
Обратите внимание, что это может быть довольно трудоемким, в зависимости от количества адресов, которые вы проверяете, потому что все они проверяются последовательно.
Если вам нужно ускорить обработку большого количества адресов, которые вы можете, например, запустить проверку как параллельный background jobs:
$addr | ForEach-Object {
Start-Job -ScriptBlock { Test-Connection $args[0] } -ArgumentList $_
} | Out-Null
$results = do {
$running = Get-Job -State Running
Get-Job -State Completed | ForEach-Object {
Receive-Job -Job $_
Remove-Job -Job $_
}
} while ($running)
$results | Out-GridView
Слишком много параллелизма может исчерпать ресурсы системы, хотя. В зависимости от того, сколько адресов вы хотите проверить, вам может потребоваться найти промежуточную позицию между последовательными работами и параллельной работой, например, используя job queue.
вы можете использовать эту команду:
$tests= Test-Connection -ComputerName $env:COMPUTERNAME
$tests+= Test-Connection -ComputerName $env:COMPUTERNAME
$tests| Out-GridView
да, это сделал, спасибо !! –
@ThomErnst: ваш wellcome –
Test-Connection
может принимать множество имен или адресов компьютеров и пинговать их. Он вернет строку для каждого пинга на каждом компьютере, но вы можете использовать параметр -Count
, чтобы ограничить его до 1 пинга. Вы также можете использовать -AsJob
для запуска команды в качестве фонового задания.
$names = server1,server2,serverN
Test-Connection -ComputerName $names -Count 1 -AsJob | Wait-Job | Receive-Job
вы получите обратно список объектов Win32_PingStatus, которые показывают, как
Source Destination IPV4Address IPV6Address Bytes Time(ms)
------ ----------- ----------- ----------- ----- --------
Если столбец времени (ResponseTime свойство) пусто, нет пинг переигровка, сервер отключился. Вы можете фильтровать на этом.
Это хорошо, это делает запись сценария меньше, спасибо большое! –