У меня возникают проблемы с регулированием количества заданий, а также с «зависшими» или «неудачными» заданиями. Вот в основном то, что я пытаюсь сделать.
$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 секунд, а затем отказаться от зависшего задания для выполнения других заданий. Весь сценарий все еще не заканчивается в этом экземпляре.
Этот код отлично работает без регулирования и ожидания задания, пока я не получаю не отвечающий сервер.