我在限制工作和“挂起”或“失败”的工作时遇到了麻烦。这基本上是我想要做的。
$allServers = Import-Csv "C:\temp\input.csv"
$job = $allServers | % {
while (@(Get-Job -State Running).Count -ge 6) {
Start-Sleep -Seconds 2
}
Start-Job -Name $_.computerName -ScriptBlock {
param ($cpn,$dom)
(DO QUERIES HERE)
(OUTPUT TO OBJECT HERE)
} -ArgumentList $_.computerName,$_.Domain
}
$jobsdone = $job | Wait-Job | Receive-Job
我想运行 5 个并发作业,很简单。
问题是当我查询没有响应的服务器时,作业挂起并且脚本永远不会结束。我已经尝试添加...
Wait-Job -Name $_.computerName -Timeout 20
...在最后一个花括号之上,但所做的只是有效地将并发限制为一个线程,直到 20 秒过去,然后放弃挂起的工作去做其他工作。在那种情况下,整个脚本仍然没有完成。
只要我没有得到无响应的服务器,此代码就可以正常工作,无需节流和工作等待。