You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中Wait-Process配合Start-Process失效,GAM安装等待方案咨询

解决方案

你之前的写法报错是因为Start-Process默认不会输出进程对象到管道,所以Wait-Process接收不到输入参数才触发错误。可以用以下几种方法实现等待MSI安装完成的效果:

  • 方法1:修复原Wait-Process写法
    给Start-Process加上-PassThru参数,强制输出进程对象到管道即可:
# 替换原来的安装启动行
Start-Process -Filepath "C:\Temp\GAMadv-xtd3-$latest-windows-x86_64.msi" -ArgumentList "/passive" -PassThru | Wait-Process -Timeout 75
  • 方法2:使用Start-Process自带的-Wait参数(更简洁)
    不需要借助管道,直接在启动进程时指定等待进程退出后再执行后续代码,还可以搭配-NoNewWindow避免弹出额外窗口:
Start-Process -Filepath "C:\Temp\GAMadv-xtd3-$latest-windows-x86_64.msi" -ArgumentList "/passive" -Wait -NoNewWindow

如果需要保留超时逻辑,也可以加-TimeoutSeconds参数(PowerShell 7.0+版本支持):

Start-Process -Filepath "C:\Temp\GAMadv-xtd3-$latest-windows-x86_64.msi" -ArgumentList "/passive" -Wait -NoNewWindow -TimeoutSeconds 75
  • 方法3:自定义轮询判断(兼容低版本PowerShell的超时方案)
    如果用的是PowerShell 5.1及更早版本,又需要自定义超时,可以手动获取进程对象轮询状态:
$installProcess = Start-Process -Filepath "C:\Temp\GAMadv-xtd3-$latest-windows-x86_64.msi" -ArgumentList "/passive" -PassThru
$waitTime = 0
while (!$installProcess.HasExited -and $waitTime -lt 75) {
    Start-Sleep -Seconds 1
    $waitTime++
}
# 超时后可以选择强制结束进程
if (!$installProcess.HasExited) {
    $installProcess.Kill()
    Write-Warning "安装超时已强制终止"
}

注意:运行该升级脚本需要提前获取管理员权限,否则MSI安装过程会因为UAC权限不足失败;另外建议执行下载前先判断C:\Temp目录是否存在,不存在则提前创建,避免下载报错。

内容的提问来源于stack exchange,提问作者dcaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:09:02