PowerShell v2.0相当于;获取作业“接收作业-自动删除作业-等待”吗;?

PowerShell v2.0相当于;获取作业“接收作业-自动删除作业-等待”吗;?,powershell,jobs,Powershell,Jobs,PowerShell v2.0与此v3.0代码snippt的等效版本是什么: 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

PowerShell v2.0与此v3.0代码snippt的等效版本是什么:

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.

请在两行中尝试此操作:

get-job | wait-job | receive-job
get-job | remove-job

请在两行中尝试此操作:

get-job | wait-job | receive-job
get-job | remove-job

对于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}; 

对于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}; 

谢谢你的回复。如果我按你的方式尝试。。。但我只能在任务实际完成时收到输出,而不能在任务实际开始时收到输出…感谢您的回复。如果我按你的方式尝试。。。但我只能在任务实际完成时接收输出,而不能在任务实际开始时接收输出……这是一种很好的方法。但它只返回一个特定作业的输出。如果我并行运行例如8个作业,并且我删除了“-id x”,则只显示第一个作业。。。有解决办法吗?很好的方法。但它只返回一个特定作业的输出。如果我并行运行例如8个作业,并且我删除了“-id x”,则只显示第一个作业。。。有解决办法吗?