我已经编写了一个脚本来检查客户端网关的开放端口,该脚本虽然效果很好,但要花很长时间才能运行。因此,我试图将工作分成多个线程,以使工作更快。
我似乎遇到的问题是,当我进行Get-Job | Receive-Job声称-Port的值为0
添加/删除-ArgumentList $ gateway,$ port(或仅端口)似乎无法解决问题。
我最初尝试使用Invoke-Comment来限制工作数量,但是我已经恢复到仅尝试使其工作。
$gateways = Import-CSV '.\perlaw.csv'
$ports = 22, 80, 8080, 443, 4443, 3389
foreach ($gateway in $gateways){
$scriptblock = {foreach ($port in $ports){
$result = Test-NetConnection $gateway.'connection gateway' -Port $port;
$out = @(
$gateway.'group id',
$gateway.'connection gateway',
$port
)
$output = "{0}, {1}, {2}" -f $out
if ($result.TcpTestSucceeded -eq 'True'){
Out-File -FilePath .\$($gateway.'group id').csv -InputObject
$output -NoClobber -Append;
}
}
}
Start-Job -ScriptBlock $scriptblock -ArgumentList $gateways, $ports
}
我希望这能遍历网关列表,该网关的每个端口,测试组合并将结果输出到文件中。
当单线程,添加多线程时,这些工作立即完成,并且没有任何内容写入文件。如果我更改作业以使每个运行Get / Receive-Job的端口运行一个作业,则无论我通过什么管道将端口显示为0。
希望这很有道理!
答案 0 :(得分:0)
就像我之前在评论中提到的那样,必须将参数添加到作业中。另一件事是,作业不必在与调用脚本相同的目录中启动。因此,不会在可能需要它们的位置创建.csv文件。所以我也为此添加了一个参数。
(在我的机器上)这有效:
return