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

PowerShell实现SCCM可用软件更新循环安装及自动重启方案咨询

SCCM 季度补丁循环安装脚本优化方案

核心优化点

  • 新增外层循环,每轮补丁安装完成后主动触发SCCM客户端更新评估,扫描依赖安装后新释放的可用补丁
  • 修正原脚本语法错误(原No分支错误嵌套在Yes分支内)
  • 新增循环次数限制,避免极端情况下死循环
  • 连续两轮扫描无待安装补丁时,才进入最终重启判断

修改后完整脚本

Add-Type -AssemblyName PresentationCore, PresentationFramework

switch (
  [System.Windows.MessageBox]::Show(
    '此操作将下载并安装微软关键更新,可能会触发自动重启,是否继续?',
    '警告',
    'YesNo',
    'Warning'
  )
) {
 'Yes' 
 {
    Start-Process -FilePath "C:\Windows\CCM\ClientUX\scclient.exe" "softwarecenter:Page=InstallationStatus"
    $installUpdateParam = @{
        NameSpace = 'root/ccm/ClientSDK'
        ClassName = 'CCM_SoftwareUpdatesManager'
        MethodName = 'InstallUpdates'
    }

    $getUpdateParam = @{            
        NameSpace = 'root/ccm/ClientSDK'
        ClassName = 'CCM_SoftwareUpdate'
        Filter = 'EvaluationState < 8'
    }    

    # 最大循环次数,避免死循环
    $maxLoop = 10
    $loopCount = 0
    do {
        $loopCount++
        # 主动触发SCCM更新评估,刷新可用补丁列表
        Invoke-CimMethod -Namespace root/ccm/ClientSDK -ClassName CCM_SoftwareUpdatesManager -MethodName ScanForUpdates -Arguments @{ScanTrigger=1}
        Start-Sleep -Seconds 15
        
        [ciminstance[]]$updates = Get-CimInstance @getUpdateParam
        if ($updates) {
            Invoke-CimMethod @installUpdateParam -Arguments @{ CCMUpdates = $updates } 
            # 等待当前轮次补丁安装完成
            while(Get-CimInstance @getUpdateParam){
                Start-Sleep -Seconds 30
            }
        }
        # 等待1分钟后再次扫描,确认是否有新释放的依赖补丁
        Start-Sleep -Seconds 60
        $remainingUpdates = Get-CimInstance @getUpdateParam
    } while ($remainingUpdates -and $loopCount -lt $maxLoop)

    # 所有补丁安装完成后判断是否需要重启
    $rebootPending = Invoke-CimMethod -Namespace root/ccm/ClientSDK -ClassName CCM_ClientUtilities -MethodName DetermineIfRebootPending
    if ($rebootPending.RebootPending){
        Invoke-CimMethod -Namespace root/ccm/ClientSDK -ClassName CCM_ClientUtilities -MethodName RestartComputer
    }
  }
  'No' 
  {
    Exit-PSSession
  }
}

可选扩展(跨重启续跑)

如果补丁依赖链需要多次重启才能完成全量安装,可以新增以下逻辑:

  • 脚本启动时检查是否存在未完成的补丁安装标记文件
  • 若存在重启待处理状态,创建开机自动触发的计划任务运行该脚本
  • 所有补丁安装完成后自动删除计划任务和标记文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:54:04