Powershell脚本不会等待进程完成

时间:2017-06-13 13:22:06

标签: powershell powershell-v3.0

我有这个powershell脚本执行一组指令,其中一个是Start-Process可执行文件。 Howerver我不希望在绝对exe完成之前执行任何后续指令。所以我用了

Start-Process progname.exe -wait

问题有时是有效的,有时它不会。在exe文件完成之前,如何确保不执行后续命令。

4 个答案:

答案 0 :(得分:3)

一种解决方案是:

$Prog = Start-Process cmd.exe -PassThru
do{sleep 1}while(Get-Process -Id $Prog.Id -Ea SilentlyContinue)

它将启动它开始的过程,然后睡眠直到该过程不再有效。

如果你跑

$P=saps cmd.exe -PassThru
for(){Get-Process -Id $P.Id;sleep 1}

是否会不断返回结果或错误?

答案 1 :(得分:1)

仅在处理完成时使用WaitForExit()继续您的脚本

$startProc = Start-Process progname.exe -PassThru
$startProc.WaitForExit()

答案 2 :(得分:0)

这可能对您有用:

Start-Process [programm].exe
while ((get-process -name [programm]).count -eq 0){}
write-host "Program successfully started"

答案 3 :(得分:0)

你应该这样做:

$Installer = Start-Process -FilePath “InstallerFile.exe” -ArgumentList “/Switches /Here” -passthru
Wait-Process -InputObject $Installer -ErrorAction SilentlyContinue

它将安装程序信息加载到$ Installer变量中,然后等待该进程退出。

我知道你说你不希望它继续进行,直到这个过程退出,但我会为其他任何看过这个的人提供信息。 您还可以在Wait-Process命令上使用以下命令对其进行超时:

Wait-Process -InputObject $Installer -ErrorAction SilentlyContinue -Timeout 30

这将在脚本继续之前导致30秒超时,当此时间间隔到期时,该命令将显示一个非终止错误,列出仍在运行的进程,并结束等待。