2017-01-19 5 views
0

Как использовать несколько командлетов Test-Connection и разместить их в одном Out-GridView, или есть другое решение для того, что я пытаюсь сделать здесь? Суть заключается в том, чтобы иметь возможность пинговать несколько адресов друг за другом и все это отображаться в одном окне.Запуск нескольких тестовых соединений для одного выхода gridview

ответ

1

фид вашего списка 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.

+0

Это хорошо, это делает запись сценария меньше, спасибо большое! –

1

вы можете использовать эту команду:

$tests= Test-Connection -ComputerName $env:COMPUTERNAME 
$tests+= Test-Connection -ComputerName $env:COMPUTERNAME 
$tests| Out-GridView 
+0

да, это сделал, спасибо !! –

+0

@ThomErnst: ваш wellcome –

0

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 свойство) пусто, нет пинг переигровка, сервер отключился. Вы можете фильтровать на этом.

 Смежные вопросы

  • Нет связанных вопросов^_^