2014-05-08 3 views
2

작업 제한 및 "중단"또는 "실패한"작업에 문제가 있습니다. 기본적으로 내가하려고하는 것이 있습니다.Powershell 시작 작업 제한

$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초 후 다른 작업을 수행 할 중단 작업을 포기하여 때까지 않는 모든 효과적으로 하나 개의 스레드에 동의를 제한한다 직업. 이 경우 전체 스크립트가 끝나지 않습니다.

이 코드는 반응이없는 서버를 얻지 않는 한 스로틀 및 작업 대기없이 정상적으로 작동합니다.

답변

3

while 루프는 작업이 실행 된 시간을 확인합니다. 그건 당신이 결정하는 몇 가지 제한 시간보다 큰 경우, 그 작업 예컨대 : 당신은 큐를 사용하는 작업을 스로틀하는 방법이 PowerShell team blog post을 확인 할 수 있습니다

while (@(Get-Job -State Running).Count -ge 6) { 
    $now = Get-Date 
    foreach ($job in @(Get-Job -State Running)) { 
     if ($now - (Get-Job -Id $job.id).PSBeginTime -gt [TimeSpan]::FromMinutes(2)) { 
      Stop-Job $job 
     } 
    } 
    Start-Sleep -sec 2 
} 

를 중지합니다.