如何通过PowerShell查询WSUS客户端更新状态并向未更新用户发邮件
基于PowerShell的WSUS客户端更新状态查询与告警方案
该方案通过调用Windows系统自带的更新代理COM对象实现状态查询,兼容性高于注册表、事件日志读取方案,可直接适配WSUS管理的客户端设备。
1. 核心查询与告警脚本
将以下内容保存为WSUSUpdateAlert.ps1:
# 初始化Windows更新会话 $updateSession = New-Object -ComObject Microsoft.Update.Session $updateSearcher = $updateSession.CreateUpdateSearcher() # 读取最近一次成功安装的更新记录 $lastSuccessUpdate = $updateSearcher.QueryHistory(0, 10) | Where-Object {$_.ResultCode -eq 2} | Select-Object -First 1 $daysSinceLastUpdate = if ($lastSuccessUpdate) { ((Get-Date) - $lastSuccessUpdate.Date).TotalDays.ToString("F1") } else { "无有效更新记录" } # 查询待安装的更新数量(排除已隐藏、已拒绝的更新) $pendingUpdates = $updateSearcher.Search("IsInstalled=0 and IsHidden=0").Updates $pendingCount = $pendingUpdates.Count # 配置告警触发规则,可根据业务需求调整 $alertTrigger = $false $alertContent = "" if ($pendingCount -gt 0) { $alertTrigger = $true $alertContent += "当前存在 $pendingCount 个未安装的系统更新`n" } if ($daysSinceLastUpdate -ne "无有效更新记录" -and [double]$daysSinceLastUpdate -gt 30) { $alertTrigger = $true $alertContent += "最近一次系统更新距今已 $daysSinceLastUpdate 天,超过30天阈值`n" } if ($alertTrigger) { $alertContent = @" 【WSUS客户端更新告警通知】 设备名称:$env:COMPUTERNAME 当前登录用户:$env:USERNAME 最近更新时间:$($lastSuccessUpdate.Date ?? "无记录") 距今天数:$daysSinceLastUpdate 待安装更新数量:$pendingCount 请尽快完成系统更新,避免出现安全漏洞或功能异常。 "@ # 邮件发送配置,替换为企业实际SMTP信息 $smtpConfig = @{ SmtpServer = "smtp.你的企业邮箱域名.com" Port = 587 UseSsl = $true Credential = New-Object System.Management.Automation.PSCredential ("告警发送邮箱@你的域名.com", (ConvertTo-SecureString "邮箱授权码" -AsPlainText -Force)) From = "告警发送邮箱@你的域名.com" To = "接收告警的用户邮箱@xxx.com" Subject = "系统更新告警:设备$env:COMPUTERNAME 存在更新异常" Body = $alertContent Encoding = [System.Text.Encoding]::UTF8 } Send-MailMessage @smtpConfig Write-Host "更新异常告警邮件已发送" } else { Write-Host "当前设备更新状态正常" }
2. 自动执行配置
要实现定期自动检测告警,可将脚本配置到Windows计划任务中:
- 触发条件可设置为「每天定时执行一次」、「用户登录时执行」
- 安全选项勾选「使用最高权限运行」,避免更新组件访问被拦截
- 执行操作设置为
powershell.exe -ExecutionPolicy Bypass -File "脚本完整路径\WSUSUpdateAlert.ps1"
3. 注意事项
- 脚本仅需在客户端本地运行,无需WSUS服务器端权限,适配所有Windows 10/11、Windows Server 2016及以上版本系统
- 告警阈值(30天未更新、待更新数量大于0)可根据企业安全规范自行调整
- SMTP服务配置需符合企业邮箱要求,部分邮箱需使用专用授权码代替账号密码登录
内容的提问来源于stack exchange,提问作者AalHai
相关产品推荐
相关产品推荐

