2016-07-26 151 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() 

這樣,如果第一份工作處於不應該是的狀態,我可以得到通知。

相關問題