2016-07-26 2 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

        Поскольку рабочие места «живут» в разных «пространствах» (плохая техничность, извините за это), они не могут видеть друг друга. Итак, решение, которое я нашел, - запустить ScriptBlock всякий раз, когда timer выбрасывает event. Таким образом, другие задания остаются без изменений.

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() 

Таким образом, если первое задание находится в состоянии, которое не должно быть, я могу получать уведомление.

Смежные вопросы