You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

跨地域多WSUS服务器远程执行PowerShell补丁脚本方案问询

当然可以远程执行并收集多台WSUS服务器的补丁报告!

针对你的场景,我给你两种实用的解决方案,都能基于你现有的脚本快速调整:

方案一:用PowerShell远程会话(PSRemoting)直接在目标WSUS服务器上执行脚本

这种方式是让你的脚本在每台WSUS服务器本地运行,然后把结果传回中央服务器,适合需要严格依赖本地环境的场景:

  1. 先配置所有WSUS服务器的PSRemoting
    在每台WSUS服务器上执行以下命令开启远程执行权限(需要管理员权限):

    Enable-PSRemoting -Force
    

    同时确保防火墙允许WinRM的流量(默认会自动配置,要是有自定义防火墙规则需要手动放行)。

  2. 修改你的脚本,支持动态指定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
    
  3. 从中央服务器批量执行并收集结果
    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管理组件远程连接每台服务器,生成报告:

  1. 在中央服务器安装WSUS管理组件
    先确保中央服务器能加载WSUS的管理程序集,安装RSAT的WSUS组件:

    Install-WindowsFeature -Name UpdateServices-RSAT -IncludeManagementTools
    
  2. 修改脚本,循环遍历所有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

火山引擎 最新活动