我正在尝试使用PowerShell进行简单的测试连接(ping扫描),以并行化每个主机连接测试。我知道Test-Connection速度很慢,但是下面的脚本的性能要比单行串行执行的速度慢:
1..20 | % {"192.168.1.$($_): $(Test-Connection -count 1 -comp 192.168.1.$($_) -quiet)"}
我相信延迟是在我接到Receive-Job的电话中,但是我看不出任何原因如此之慢。
$Subnet = '192.168.1.'
$Hosts = 1..20 | foreach {"$Subnet$_"}
$Jobs = $Hosts | foreach {Test-Connection $_ -Count 1 -AsJob}
$Results = Receive-Job -Job $Jobs -Wait
$Results
当我将以上代码包装在Measure-Command中时,它会在3-4秒内完成,但是不会输出$ Results的值。当我在命令行中输入$ Results时,它会花费很多时间将它们打印出来,就像没有Measure-Command一样。
我正在运行Wireshark,看到许多几乎立即的ICMP请求和答复,稍后还会出现一些故障。 Get-Job将所有作业列出为已完成,但是Receive-Job仍然很慢。
我绝对是PowerShell的初学者,所以我敢肯定解决方案是显而易见的。如果有任何区别,我正在运行PS 5。