使用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
相关产品推荐
相关产品推荐

