求可在Windows Server 2012 R2的MECM/SCCM客户端安装所有更新的PowerShell脚本
针对MECM/SCCM客户端的Windows Server 2012 R2补丁安装PowerShell脚本
当然有。你可以借助SCCM客户端的WMI接口编写PowerShell脚本,触发补丁扫描、检索可用更新并执行安装。以下是实用脚本示例:
脚本示例
# 以管理员身份运行此脚本 # 确保CCM服务运行 $ccmService = Get-Service -Name ccmexec if ($ccmService.Status -ne 'Running') { Start-Service -Name ccmexec Write-Host "已启动CCM客户端服务" } # 触发软件更新扫描 Write-Host "开始扫描可用更新..." Invoke-WmiMethod -Namespace root\ccm\ClientSDK -ClassName CCM_SoftwareUpdatesManager -Name TriggerScan # 等待扫描完成(可根据实际情况调整等待时间) Start-Sleep -Seconds 60 # 获取所有可用的软件更新 Write-Host "检索可用更新..." $availableUpdates = Get-WmiObject -Namespace root\ccm\ClientSDK -ClassName CCM_SoftwareUpdate | Where-Object { $_.EvaluationState -eq 2 -or $_.EvaluationState -eq 6 } # EvaluationState值说明:2=需要安装,6=已下载待安装 if ($availableUpdates.Count -eq 0) { Write-Host "没有需要安装的可用更新" exit } Write-Host "找到 $($availableUpdates.Count) 个需要安装的更新" # 触发更新安装 Write-Host "开始安装更新..." $updateIDs = $availableUpdates | Select-Object -ExpandProperty UpdateID Invoke-WmiMethod -Namespace root\ccm\ClientSDK -ClassName CCM_SoftwareUpdatesManager -Name InstallUpdates -ArgumentList (, [string[]]$updateIDs) # 可选:监控安装状态(示例逻辑) do { Start-Sleep -Seconds 30 $installingUpdates = Get-WmiObject -Namespace root\ccm\ClientSDK -ClassName CCM_SoftwareUpdate | Where-Object { $_.EvaluationState -in @(3,4,5,7) } # EvaluationState值说明:3=正在下载,4=等待安装,5=正在安装,7=等待重启 Write-Host "当前有 $($installingUpdates.Count) 个更新正在处理中..." } while ($installingUpdates.Count -gt 0) Write-Host "更新安装完成" # 检查是否需要重启 $rebootRequired = Get-WmiObject -Namespace root\ccm\ClientSDK -ClassName CCM_ClientUtilities | Select-Object -ExpandProperty RebootPending if ($rebootRequired) { Write-Host "系统需要重启以完成更新安装" # 可选:自动重启 # Restart-Computer -Force }
注意事项
- 必须以管理员权限运行PowerShell,否则无法访问CCM WMI命名空间和执行系统操作
- 确保SCCM客户端服务(
ccmexec)处于运行状态,脚本中已包含启动逻辑 - 扫描等待时间可根据网络和服务器性能调整,确保客户端完成更新列表同步
- 部分补丁安装后强制要求重启,脚本中提供了重启检查逻辑,可根据需求开启自动重启
- 此脚本仅适用于已安装MECM/SCCM客户端的机器,依赖
root\ccm\ClientSDK命名空间的WMI类
内容的提问来源于stack exchange,提问作者Puneeth BS
相关产品推荐
相关产品推荐

