无法通过PowerShell脚本安装MSU格式微软hotfix更新 求助脚本修改方案
MSU更新安装脚本问题修正
原脚本失效原因
你写的脚本存在3个直接导致安装失败的问题:
- 直接启动.msu文件时,系统默认调用
wusa.exe处理安装,但Start-Process默认不会等待安装进程执行完毕就返回,脚本运行后立刻结束,此时安装进程可能还在后台运行,或被系统权限规则直接拦截无任何提示 - 没有捕获安装进程的退出码,无法判断安装是成功、失败、还是更新已经预装
- 没有显式指定运行权限和调用宿主,普通用户权限下静默安装系统更新会被系统直接拒绝,不会弹出UAC提示
修正后的生产可用脚本
# 配置MSU更新包完整路径 $msuFilePath = "C:\Installer\windows10.0-kb4520062-x64_9f2a827f11f945d19bd26de6f113f611a38bb8a1.msu" # 前置校验:文件是否存在 if (-not (Test-Path $msuFilePath -PathType Leaf)) { Write-Error "安装终止:指定路径的MSU文件不存在,请检查路径配置" exit 1 } # 显式调用wusa.exe执行安装,等待执行完成并返回进程结果 $installResult = Start-Process -FilePath "wusa.exe" ` -ArgumentList @("`"$msuFilePath`"", "/quiet", "/norestart") ` -Wait ` -PassThru ` -WindowStyle Hidden # 匹配wusa标准退出码返回安装状态 switch ($installResult.ExitCode) { 0 { Write-Host "更新安装完成" } 3010 { Write-Host "更新安装完成,需要重启系统后生效" } 2359302 { Write-Host "该更新已在当前系统安装,无需重复部署" } -2146498530 { Write-Error "安装失败:更新包不适用于当前系统版本、架构,请核对更新包匹配性" } default { Write-Error "安装失败,错误码:$($installResult.ExitCode),可通过事件查看器-Windows日志-Setup排查详细原因" } } exit $installResult.ExitCode
使用说明
- 必须以管理员身份启动PowerShell后再运行该脚本,否则会因权限不足直接安装失败
- 同时间段不要启动多个wusa安装进程,Windows更新安装服务同一时间仅支持处理一个安装任务
- 若在Windows Server 2016/Win10 1607及更早版本上wusa调用异常,可替换为DISM命令安装,将上述脚本中启动的文件改为
dism.exe,参数替换为@("/online", "/add-package", "/packagepath:"$msuFilePath"", "/quiet", "/norestart")即可,退出码判断逻辑通用。
内容的提问来源于stack exchange,提问作者jimmyafflick
相关产品推荐
相关产品推荐

