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

使用PowerShell脚本安装补丁时WUSA报错且更新未记录的问题排查请求

排查WUSA补丁安装异常的问题

结合你描述的「弹出错误提示框、脚本显示安装完成但更新历史无记录」的现象,咱们从脚本逻辑、WUSA特性两个维度拆解问题,一步步定位故障点:

1. 冗余的Invoke-Command引发的环境问题

你当前是在本地执行脚本,但却用了Invoke-Command调用脚本块——这不仅完全没必要,还可能导致$Patch变量在本地环回话中传递异常,或者WUSA的执行环境出现偏差。直接去掉Invoke-Command,在本地直接执行Start-Process会更可靠:

修改后的核心代码:

Try {
    Write-Host ("`n Preparing to install: " + $Patch) -ForegroundColor Yellow
    Write-Host ("`n Installing...") -ForegroundColor Magenta
    
    $arglist = $Patch, "/quiet", "/norestart"
    Start-Process -FilePath "C:\windows\system32\wusa.exe" -ArgumentList $arglist -Wait -NoNewWindow
    
    Write-Host "`n Installation complete`n" -ForegroundColor Green
} Catch {
    Write-Host "Installation failed with Error -- $_" -ForegroundColor Red
    $Error.Clear()
}

2. 未捕获WUSA的退出代码,导致错误被忽略

默认情况下,Start-Process不会把WUSA的执行错误抛出为PowerShell异常,所以你的Try-Catch根本捕获不到安装失败的情况——这就是为什么弹出错误框后,脚本还会继续显示「安装完成」的核心原因。

你需要添加-PassThru参数获取进程对象,主动检查退出代码:

$process = Start-Process -FilePath "C:\windows\system32\wusa.exe" -ArgumentList $arglist -Wait -NoNewWindow -PassThru
if ($process.ExitCode -ne 0) {
    throw "WUSA exited with code $($process.ExitCode)"
}

WUSA常见退出代码参考:

  • 0: 安装成功
  • 1603: 安装失败(多因补丁不兼容、文件损坏、权限不足)
  • 3010: 安装成功,需重启系统
  • 1641: 安装成功,正在自动重启

3. /quiet参数未生效导致弹出错误框

如果依然弹出错误提示框,说明静默参数可能没被正确解析:

  • 若$Patch变量对应的路径包含空格,必须用引号包裹参数:
    $arglist = "`"$Patch`"", "/quiet", "/norestart"
    
  • 尝试替换为/passive参数测试,部分老补丁对/quiet的支持存在兼容性问题。

4. 补丁本身的问题

如果以上调整都无效,大概率是补丁文件或兼容性问题:

  • 验证补丁文件的哈希值,确认下载过程中没有损坏
  • 检查补丁是否匹配当前系统版本(32位/64位、Windows版本号)
  • 手动双击补丁安装,看是否弹出相同错误,以此排除脚本层面的问题

5. 权限缺失的隐性问题

务必确保PowerShell是以管理员身份运行的,WUSA安装补丁需要系统级权限,否则会出现静默失败或弹出权限提示框的情况。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:00:17