1

与此 v3.0 代码片段等效的 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 v2.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.
4

2 回答 2

1

对于 V2,我能想到的最好的方法是:

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

注意:如果您有多个作业正在运行,我建议使用 Get-Job -Id 参数。此外,1 秒的睡眠可能有点长,您可以将其调整为 250 毫秒。

对于多个工作,您可以这样做:

while ($jobs = Get-Job) { $jobs | %{if ($_.HasMoreData) {Receive-Job $_} else {Remove-Job $_}}; Sleep 1}; 
于 2013-09-27T16:18:28.310 回答
0

在两个不同的行中尝试这个:

get-job | wait-job | receive-job
get-job | remove-job
于 2013-09-27T15:06:14.663 回答