3

ジョブのスロットリングと「ハング」または「失敗」したジョブに問題があります。これが基本的に私がやろうとしていることです。

$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 つのスレッドに効果的に制限し、ハングしたジョブを破棄して他のジョブを実行するだけです。そのインスタンスでは、スクリプト全体がまだ終了していません。

このコードは、応答しないサーバーを取得しない限り、スロットリングやジョブの待機なしで正常に機能します。

4

1 に答える 1