2016-07-26 3 views
0

내가에서 오전 세션을 차단하지 않고는 이전에 시작한 작업의 상태 무엇을 확인하려고 해요을 확인합니다 :작업은 그래서 나는이 같은 시도 작업 상태

Start-Job -ScriptBlock { 
    while($true){ 
     $i++ 
     Start-Sleep -Seconds 1 
    } 
} 

Start-Job -ScriptBlock { 
    switch ((Get-Job)[0].State){ 
     "Stopped" { 
      write-host "Stopped" 
     } 
     "Running"{ 
      write-host "Running" 
     } 
     default { 
      write-host "Something else" 
     } 
    } 
} 

Get-Job | Receive-Job 

을하지만 그것은 던졌습니다 심지어 여러 작업을 실행 중일 때도 null 배열에 색인을 작성할 수 없다는 오류가 표시됩니다.

다른 작업 상태를 확인할 수있는 작업을 시작할 수있는 방법이 있습니까?

답변

0

        작업은 서로 다른 "공간"(불쌍한 전문성, 미안)으로 "살아"있기 때문에 서로를 볼 수 없습니다. 그래서, 내가 찾은 해결책은 timerevent을 던질 때마다 ScriptBlock을 실행하는 것입니다. 이렇게하면 다른 작업이 방해받지 않고 계속됩니다.

Start-Job -ScriptBlock { 
    while($true){ 
     $i++ 
     Start-Sleep -Seconds 1 
    } 
} 

$timer = New-Object System.Timers.Timer 
$timer.AutoReset = $true #repeat? 
$timer.Interval = 500 #ms 

Register-ObjectEvent -InputObject $timer -EventName Elapsed -Action { 
    $job_state = (Get-Job)[0].State 
    switch ($job_state){ 
     "Stopped" { 
      write-host "Stopped" 
     } 
     "Running"{ 
      write-host "Running" 
     } 
     default { 
      write-host "Something else" 
     } 
    } 
} 

$timer.Start() 

이렇게하면 첫 번째 작업이 예정되어 있지 않은 상태에있는 경우 알림을받을 수 있습니다.

관련 문제