Запускать несколько тестовых подключений для одного вывода gridview
Как я могу использовать несколько Test-Connection
командлеты и положить их все в одном Out-GridView
, или есть другое решение того, что я пытаюсь сделать здесь? Суть в том, чтобы иметь возможность пинговать несколько адресов друг за другом и отображать их в одном окне.
3 ответа
Подайте ваш список IP-адресов (или имен хостов) в ForEach-Object
цикл работает Test-Connection
для каждого адреса, затем передайте результат в Out-GridView
:
$addr = '192.168.1.13', '192.168.23.42', ...
$addr | ForEach-Object {
Test-Connection $_
} | Out-GridView
Обратите внимание, что это может занять довольно много времени, в зависимости от количества проверяемых адресов, поскольку все они проверяются последовательно.
Если вам нужно ускорить обработку большого количества адресов, вы можете, например, запустить проверки как параллельные фоновые задания:
$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
Однако слишком большой параллелизм может исчерпать ваши системные ресурсы. В зависимости от того, сколько адресов вы хотите проверить, вам может потребоваться найти некоторую золотую середину между последовательным запуском и параллельным выполнением, например, с помощью очереди заданий.
Вы можете использовать эту команду:
$tests= Test-Connection -ComputerName $env:COMPUTERNAME
$tests+= Test-Connection -ComputerName $env:COMPUTERNAME
$tests| Out-GridView
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) пуст, воспроизведение пинга отсутствует, сервер отключен. Вы можете отфильтровать это.