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

PowerShell Start-Process ArgumentList多参数传参不生效问题

故障原因

该问题由三个因素共同导致:

  1. 多余的手动引号:你不需要在-ArgumentList的数组元素里手动给路径包裹双引号。Start-Process在拼接进程启动参数时,会自动为包含空格的路径添加转义引号,你手动添加的"会被当做路径的字面量内容传给wusa.exe。
  2. PowerShell 5.1的参数解析特性:你通过echo打印的只是数组元素本身的内容,不是最终拼好传给进程的完整命令行。单参数传入时,wusa.exe自带的容错逻辑会自动剥离路径首尾多余的引号,所以能正常运行;传入多个参数时,多余的引号会打乱参数边界,导致/norestart被错误识别为路径的一部分,直接触发参数用法错误。
  3. 变量名冲突风险:$Args是PowerShell的内置自动变量,用于存储脚本/函数的未绑定输入参数,你用它作为自定义参数数组的变量名,存在变量被覆盖、内容错乱的潜在风险。
修复代码

去掉手动拼接的引号,更换自定义变量名即可,推荐用Join-Path拼接路径避免手动拼斜杠的错误:

# 拼接MSU文件完整路径
$msuFullPath = Join-Path -Path $Path_Temp -ChildPath ($Hotfix[1] + '.msu')
# 构造参数数组,不需要手动给路径加引号
$installArgs = @($msuFullPath, '/norestart')
# 启动wusa执行安装,自动请求管理员权限,等待安装结束再继续后续流程
Start-Process -FilePath (Join-Path $Env:SystemRoot 'System32\wusa.exe') -ArgumentList $installArgs -Verb RunAs -Wait

如果遇到极端场景下数组参数解析仍异常,可以直接把所有参数拼成单个字符串传入,在PS5.1下兼容性更好:

$msuFullPath = Join-Path -Path $Path_Temp -ChildPath ($Hotfix[1] + '.msu')
# 手动拼接完整参数字符串,路径加引号兼容带空格的路径场景
$installArgs = "`"$msuFullPath`" /norestart"
Start-Process -FilePath (Join-Path $Env:SystemRoot 'System32\wusa.exe') -ArgumentList $installArgs -Verb RunAs -Wait

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:30:49