ジョブのスロットリングと「ハング」または「失敗」したジョブに問題があります。これが基本的に私がやろうとしていることです。
$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 秒が経過するまで同時実行を 1 つのスレッドに効果的に制限し、ハングしたジョブを破棄して他のジョブを実行するだけです。そのインスタンスでは、スクリプト全体がまだ終了していません。
このコードは、応答しないサーバーを取得しない限り、スロットリングやジョブの待機なしで正常に機能します。