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

       由于工作“活”在不同的“空间”(技术性差,为此后悔的),他们不能看到对方。因此,我发现的解决方案是在timer引发event时运行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() 

这样,如果第一份工作处于不应该是的状态,我可以得到通知。