跨地域多WSUS服务器远程执行PowerShell补丁脚本方案问询
当然可以远程执行并收集多台WSUS服务器的补丁报告!
针对你的场景,我给你两种实用的解决方案,都能基于你现有的脚本快速调整:
方案一:用PowerShell远程会话(PSRemoting)直接在目标WSUS服务器上执行脚本
这种方式是让你的脚本在每台WSUS服务器本地运行,然后把结果传回中央服务器,适合需要严格依赖本地环境的场景:
先配置所有WSUS服务器的PSRemoting
在每台WSUS服务器上执行以下命令开启远程执行权限(需要管理员权限):Enable-PSRemoting -Force同时确保防火墙允许WinRM的流量(默认会自动配置,要是有自定义防火墙规则需要手动放行)。
修改你的脚本,支持动态指定WSUS服务器
把原来固定连接本地WSUS的代码,改成接受参数的形式:param( [string]$WsusServerName = "localhost", [int]$WsusPort = 8530 ) [void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") # 用AdminProxy远程连接(本地连接也兼容) $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer($WsusServerName, $false, $WsusPort) # 这里保留你原来的补丁报告生成逻辑,比如获取计算机补丁状态、更新列表等 # 最后返回结构化的结果,比如PSCustomObject从中央服务器批量执行并收集结果
用Invoke-Command批量调用脚本,收集所有服务器的报告:# 定义所有WSUS服务器列表 $wsusServerList = @("wsus-east.yourdomain.com", "wsus-west.yourdomain.com", "wsus-south.yourdomain.com") # 远程执行脚本,收集结果 $combinedResults = Invoke-Command -ComputerName $wsusServerList -FilePath "C:\YourScripts\WSUS-Patch-Report.ps1" # 把结果导出成统一的报告,比如CSV $combinedResults | Export-Csv -Path "C:\WSUS_Combined_Patch_Report.csv" -NoTypeInformation
方案二:直接在中央服务器远程连接WSUS服务(无需PSRemoting)
这个方案更省心——不需要在目标WSUS服务器上开远程执行权限,直接在中央服务器上通过WSUS管理组件远程连接每台服务器,生成报告:
在中央服务器安装WSUS管理组件
先确保中央服务器能加载WSUS的管理程序集,安装RSAT的WSUS组件:Install-WindowsFeature -Name UpdateServices-RSAT -IncludeManagementTools修改脚本,循环遍历所有WSUS服务器
调整你的脚本,让它逐个连接远程WSUS服务器并生成报告:# 定义WSUS服务器列表 $wsusServerList = @("wsus-east.yourdomain.com", "wsus-west.yourdomain.com") $allReports = @() foreach ($server in $wsusServerList) { try { [void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") # 远程连接目标WSUS服务器(端口根据实际情况调整,HTTPS用8531) $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer($server, $false, 8530) # 执行你的补丁报告逻辑,比如获取缺失补丁的计算机数量、更新详情等 $serverReport = [PSCustomObject]@{ ServerName = $server LastSyncTime = $wsus.GetConfiguration().LastSyncTime MissingUpdatesCount = ($wsus.GetUpdates() | Where-Object { $_.IsApproved -and $_.UpdateClassificationTitle -eq "Critical Updates" } | Measure-Object).Count # 这里添加你需要的其他报告字段 } $allReports += $serverReport } catch { Write-Warning "连接服务器 $server 失败:$($_.Exception.Message)" } } # 导出合并后的报告 $allReports | Export-Csv -Path "C:\WSUS_Global_Patch_Report.csv" -NoTypeInformation
关键注意事项
- 权限要求:执行脚本的账号必须在每台WSUS服务器的WSUS Administrators组中,或者拥有WSUS的管理权限。
- 端口确认:默认WSUS用8530(HTTP)或8531(HTTPS),如果你的服务器改过端口,一定要对应调整脚本里的端口参数。
- 错误处理:建议添加
try/catch块,避免单台服务器连接失败导致整个脚本中断,同时方便排查问题。
内容的提问来源于stack exchange,提问作者rolz




