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

如何通过远程控制自动化WUSA部署并解决无Wait命令问题

远程自动化部署KB补丁(解决WUSA无原生Wait命令问题)

场景与执行流程

我们的目标是获取本地KB文件列表,通过WUSA工具在远程目标机器上自动化执行安装,具体流程如下:

  • 建立与目标计算机的PowerShell会话
  • 循环遍历本地存储的所有KB补丁文件
  • 远程调用WUSA执行补丁安装
  • 等待当前补丁安装完成后再处理下一个
  • 安装完成后提供即时重启或定时重启的选项

完整PowerShell实现代码

# 设置会话错误处理策略
$ErrorActionPreference = "continue"
# 获取C:\WinPatch目录下所有.msu格式的补丁文件
$PatchList = (Get-ChildItem -Path C:\WinPatch -Recurse | Where-Object {$_.Extension -eq '.msu'})
# 循环遍历每个补丁文件
foreach ($Patch in $PatchList) {
    Try {
        Write-Host ("`n 准备安装补丁: " + $Patch.Name) -ForegroundColor Yellow
        Write-Host ("`n 正在安装...") -ForegroundColor Magenta
        # 定义远程执行的脚本块:用Start-Process的-Wait参数实现安装等待
        $SB = {
            $arglist = "$using:Patch.FullName", "/quiet", "/norestart"
            Start-Process -FilePath "C:\windows\system32\wusa.exe" -ArgumentList $arglist -Wait
        }
        # 远程执行脚本块(需确保已建立信任连接)
        Invoke-Command -ScriptBlock $SB
        Write-Host "`n 补丁安装完成`n" -ForegroundColor Green
    } Catch {
        Write-Host "安装失败,错误信息: $_" -ForegroundColor Red
        $Error.Clear()
    }
}
# 重启选项处理
$Ans1 = Read-Host "`n 是否立即重启计算机?(输入Y确认,N取消)"
if ($Ans1 -eq 'Y' -or $Ans1 -eq 'y') {
    # 清理本地补丁文件
    Remove-Item -Path C:\WinPatch\*.msu -Force
    Write-Host "`n 计算机将在5秒后重启..." -ForegroundColor Yellow
    Start-Sleep -Seconds 5
    Restart-Computer -Force
} else {
    # 检测PowerShell版本,判断是否支持定时重启
    $PSVersion = (test-wsman -ComputerName localhost).ProductVersion
    if ($PSVersion.EndsWith("1.0") -or $PSVersion.EndsWith("2.0")) {
        Write-Host "`n 当前计算机安装的是PowerShell v1.0/v2.0,无法通过脚本定时重启,请手动打开任务计划程序设置" -ForegroundColor Red
        Read-Host "`n 按回车键继续..."
    } else {
        # 配置定时重启任务
        Import-Module PSScheduledJob
        $RestartTime = Read-Host -Prompt "`n 请输入重启时间,格式为:mm/dd/yyyy hh:mmAM/PM"
        $Confirm = Read-Host -Prompt "`n 你输入的时间是: $RestartTime,确认请输入Y"
        if ($Confirm -eq 'Y' -or $Confirm -eq 'y') {
            $JobName = Read-Host -Prompt "`n 请输入定时重启任务的名称"
            $Trigger = New-JobTrigger -Once -At $RestartTime
            Register-ScheduledJob -Name $JobName -Trigger $Trigger -ScriptBlock { Restart-Computer -Force } -RunAs32
            Write-Host "`n 定时重启任务已创建成功" -ForegroundColor Green
        } else {
            Write-Host "`n 请重新运行脚本并尝试设置" -ForegroundColor Red
        }
    }
}

关键功能说明

  • 解决WUSA无Wait命令问题:通过Start-Process -Wait参数强制等待WUSA安装完成,避免脚本提前执行后续逻辑
  • 远程执行逻辑:使用Invoke-Command传递脚本块到目标机器,通过$using:关键字正确引用本地补丁文件变量
  • 错误捕获:Try/Catch块捕获安装异常并输出明确错误信息,避免脚本意外中断
  • 灵活重启选项:支持即时重启,同时根据PowerShell版本适配定时重启方案,低版本PS会给出手动操作指引
  • 补丁清理:即时重启前自动清理本地补丁文件,节省存储空间

内容的提问来源于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.28 09:56:02