繁体   English   中英

对一个gridview输出运行多个测试连接

[英]Run multiple test-connection for one gridview output

如何使用多个Test-Connection cmdlet并将它们全部放在一个Out-GridView ,或者我在这里尝试做的另一种解决方案? 关键是要能够彼此ping通多个地址,并将它们全部显示在同一窗口中。

您可以使用以下命令:

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

将您的IP地址(或主机名)列表送入为每个地址运行Test-ConnectionForEach-Object循环中,然后将结果通过管道传递到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

但是,太多的并行操作可能会耗尽系统资源。 根据要检查的地址数量,您可能需要找到顺序运行和并行运行之间的中间地带,例如通过使用作业队列

Test-Connection可以使用计算机名称或地址的数组,并对其进行ping操作。 它将为每台计算机上的每个ping返回一行,但是您可以使用-Count参数将其限制为1 ping。 您还可以使用-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属性)为空,则没有ping重播,服务器处于脱机状态。 您可以对此进行过滤。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM