PowerShell是否有等待参数?Start-Process等待命令完成失败求助
PowerShell Start-Process 等待安装完成失效的解决办法
你当前的命令里-Wait参数没生效,大概率是因为这个exe安装包本身会启动另一个后台子进程完成实际安装,主进程很快就退出,导致PowerShell误判安装已结束。以下是几个可行的解决方案:
方案1:追踪安装包的子进程
用-PassThru获取主进程对象,再追踪它的所有子进程直到全部结束:
$installer = Start-Process -FilePath "C:\Temp\Latitude_5X10_Precision_3550_1.15.0.exe" -ArgumentList "/S" -PassThru -Wait # 查找主进程的所有子进程并等待退出 $childProcesses = Get-CimInstance Win32_Process | Where-Object { $_.ParentProcessId -eq $installer.Id } foreach ($child in $childProcesses) { $childProc = Get-Process -Id $child.ProcessId -ErrorAction SilentlyContinue if ($childProc) { $childProc.WaitForExit() } }
方案2:直接调用安装包(替代Start-Process)
对于支持静默参数的exe,直接用&操作符调用,PowerShell默认会等待进程结束:
& "C:\Temp\Latitude_5X10_Precision_3550_1.15.0.exe" /S
如果是GUI安装包,这种方式也会等待主进程及关联子进程(多数情况)完成。
方案3:验证静默参数是否正确
部分安装包的静默参数并非/S,可能是/quiet、/qn(MSI类)或/silent,你可以运行以下命令查看安装包的帮助信息:
& "C:\Temp\Latitude_5X10_Precision_3550_1.15.0.exe" /?
如果是嵌套MSI的exe,可先提取MSI文件(通常用/extract参数),再用msiexec /i 提取后的MSI路径 /qn执行,这种方式-Wait必然生效。
内容的提问来源于stack exchange,提问作者Ken Robertson
相关产品推荐
相关产品推荐

