[英]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-Connection
的ForEach-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.