我有这个powershell脚本执行一组指令,其中一个是Start-Process
可执行文件。 Howerver我不希望在绝对exe完成之前执行任何后续指令。所以我用了
Start-Process progname.exe -wait
问题有时是有效的,有时它不会。在exe文件完成之前,如何确保不执行后续命令。
答案 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秒超时,当此时间间隔到期时,该命令将显示一个非终止错误,列出仍在运行的进程,并结束等待。