2013-09-27 43 views
1

什麼是PowerShell的V2.0相當於這個3.0的代碼snippt:相當於「get-job | receive-job -AutoRemoveJob -Wait」的PowerShell v2.0?

for($i=0; $i -lt $num_jobs; $i++) { 
    Write-Host -ForegroundColor Darkgreen "[i] Job" $i "starting..." 
    Start-Job -ScriptBlock $insert_data -ArgumentList 'host', 'user', 'pass', 'db', $i, $log_out[$i] | Out-Null; 
} 

get-job | receive-job -AutoRemoveJob -Wait 

我試過沒有運氣

for($i=0; $i -lt $num_jobs; $i++) { 
    Write-Host -ForegroundColor Darkgreen "[i] Job" $i "starting..." 
    Start-Job -ScriptBlock $insert_data -ArgumentList 'host', 'user', 'pass', 'db', $i, $log_out[$i] | Out-Null; 
} 

get-job | receive-job -Wait 
get-job | remove-job 

它的PowerShell 2.0失敗,出現以下:

Remove-Job : The command cannot remove the job with the 3 session identifier be 
cause the job is not finished. To remove the job, first stop the job, or use th 
e Force parameter. 

回答

1

我能想出的V2的最好的是:

Get-Job | % {while ($_.HasMoreData) { Receive-Job $_; Sleep 1 }; Remove-Job $_} 

注:我建議使用Get-工作-Id參數,你有一個以上的工作運行情況。此外,1秒的睡眠可能會有點長,你可以調整,說250毫秒。爲回答

while ($jobs = Get-Job) { $jobs | %{if ($_.HasMoreData) {Receive-Job $_} else {Remove-Job $_}}; Sleep 1}; 
+0

好方法。但它僅返回一個特定作業的輸出。如果我正在運行,例如8個工作並行,我刪除了'-id x'只顯示了第一個工作...任何解決方法? – Matze

+0

@Matze查看更新的答案。 –

0

請嘗試以下兩條不同的線條:

get-job | wait-job | receive-job 
get-job | remove-job 
+0

感謝:

多個作業,你可以做到這一點。如果我嘗試它的方式,它的工作原理...但我只能從我的任務接收輸出,當它實際完成時,而不是當它開始運行時... – Matze