在PowerShell中等待所有子进程完成

19

我希望能够在PowerShell中同时执行多个外部脚本,然后等待它们全部完成后再继续执行。目前我正在使用“start-process -NoNewWindow ...”命令循环遍历所有子进程,但是会终止。

我已经找到了许多等待一个进程完成的方法(这显然很简单),但是它们似乎都不能解决我的问题。

在PowerShell中有一个类似于UNIX版本的等待所有子进程完成的方法,这正是我所需要的。


Unix给你比Powershell更好的选择:Python、bash、Perl。想得更简单! - MUY Belgium
你说你解决了工作的问题?你愿意分享解决方案吗? - lit
现在您可以在UNIX上运行PowerShell。https://github.com/PowerShell/PowerShell - lit
2个回答

35

不要忘记对于多个进程,可能最直接的方法是使用Wait-Process,例如:

$procs = $(Start-Process Notepad.exe -PassThru; Start-Process Calc.exe -PassThru)
$procs | Wait-Process

2
+1 Keith。我完全错过了wait-process。可能是因为我从未使用过 :) - ravikanth
是的,这是一个有用的 cmdlet,有时候很方便。 :-) - Keith Hill
“Wait-Process” 对于多个进程也能完美运行,但是我猜测您无法报告实时状态信息,例如当前正在运行的子进程数量,而您所获得的唯一控制权就是“超时”参数。 - Jacek M
4
记得使用“-PassThru”参数,否则"$procs"将为空! - Sune Rievers

9
你有没有使用过PowerShell v2中的后台作业功能?
$job = Start-Job -Name "Proc1" -ScriptBlock { Sleep 10000 }
Wait-Job -Job $job

此外,Start-Process 命令有一个名为 -wait 的参数。当指定该参数时,Start-Process 会等待子进程退出。
Start-Process -FilePath calc.exe -Wait

“等待开关”在处理多个进程时并不是很有用。我通过使用“作业(jobs)”来解决了我的问题,它们是一个很棒的工具。谢谢! - Jacek M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接