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

如何使用PowerShell脚本查询Windows最新更新安装时间并实现更新逾期提醒?

PowerShell Windows更新超期提醒脚本解决方案

功能实现逻辑

  • 调用CIM接口查询本地最后一次成功安装的Windows安全补丁时间,过滤预览版、病毒库更新类非系统补丁记录
  • 计算最后更新时间与当前时间的差值,判断是否超过7天阈值
  • 差值超阈值时,调用SMTP协议向指定用户发送提醒邮件

完整脚本代码

# --------------- 需手动修改的配置项 ---------------
$smtpServer = "你的SMTP服务器地址" # 填公司内部SMTP服务器地址
$smtpPort = 25 # 常用端口为25/587,根据实际SMTP配置调整
$senderEmail = "update-alert@company.com" # 发件人邮箱地址
$receiverEmail = "user@company.com" # 收件人邮箱,需发送给多人时可配置为邮箱地址数组
$wsusServerName = "公司WSUS服务器地址" # 提醒文案中显示的WSUS服务器名称
$overdueDays = 7 # 超期阈值,按需求固定为7天
# -------------------------------------------------

# 获取最后一次成功安装的系统补丁时间
$lastUpdate = Get-CimInstance -ClassName Win32_QuickFixEngineering | 
    Where-Object { $_.InstalledOn -ne $null -and $_.Description -notmatch "预览|Defender.*更新|病毒库" } | 
    Sort-Object -Property InstalledOn -Descending | 
    Select-Object -First 1 -ExpandProperty InstalledOn

# 兼容无法通过QFE查询到更新记录的系统版本
if (-not $lastUpdate) {
    $regPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Install"
    $lastUpdate = (Get-Item $regPath).GetValue("LastSuccessTime")
    if (-not $lastUpdate) {
        Write-Warning "未查询到系统更新记录,直接触发超期提醒"
        $daysSinceLastUpdate = $overdueDays + 1
    }
}
else {
    # 计算距离当前的天数
    $daysSinceLastUpdate = (Get-Date).Subtract($lastUpdate).TotalDays
}

# 判断是否超期,超期则发送提醒邮件
if ($daysSinceLastUpdate -gt $overdueDays) {
    $mailSubject = "系统更新超期提醒:请尽快连接WSUS安装最新补丁"
    $mailBody = @"
您好:
您的设备最后一次安装Windows系统更新的时间为 $($lastUpdate.ToString("yyyy年MM月dd日")),距今已超过 $overdueDays 天。
请您尽快将设备接入公司内网,连接 $wsusServerName 服务器获取并安装最新安全更新,避免设备存在安全风险。
如有操作问题请联系IT运维部门处理。
"@
    # 如SMTP需要身份认证,请自行添加 -Credential 参数传入加密存储的凭据
    Send-MailMessage -From $senderEmail -To $receiverEmail -Subject $mailSubject -Body $mailBody -SmtpServer $smtpServer -Port $smtpPort -Encoding UTF8
}

部署说明

  • 脚本兼容PowerShell 5.1及以上版本,无需额外安装依赖组件
  • 计划任务配置:触发时间设置为每月第二个周二(微软官方补丁日)之后一周的工作日,运行账户选择内置SYSTEM账户即可,无需用户登录也能正常执行
  • 敏感信息处理:如果SMTP需要身份认证,不要在脚本中明文存储密码,可使用ConvertTo-SecureString将加密后的密码保存到本地授权路径,脚本运行时读取即可
  • 如果SMTP服务器要求SSL连接,需要在Send-MailMessage命令后添加-UseSsl参数
  • 测试验证:首次部署前可以临时修改$overdueDays为更小的值(比如0),手动运行脚本验证更新查询、邮件发送逻辑是否正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:09:03