在wsus服务器中需通过powershell脚本(如decline-supersededupdates.ps1)结合策略配置与定期维护,自动拒绝被取代的旧补丁,以减少冗余、降低负载并避免错误0x80244007。
在 wsus 服务器中配置自动拒绝被取代的旧版本补丁,核心目标是减少冗余更新、降低数据库负载、避免客户端扫描风暴,并防止错误 0x80244007 等因元数据过多引发的问题。这不是一个开箱即用的“开关”,而是需结合 powershell 脚本 + 合理策略 + 定期维护来实现的自动化流程。
明确“被取代”更新的含义
被取代(superseded)更新指已被新版本补丁完全替代的旧补丁——例如 KB1234567 修复了某个漏洞,KB7654321 发布后包含其全部修复并新增内容,那么前者即被后者取代。WSUS 不会自动拒绝这类更新,它们仍参与客户端扫描,占用资源。
使用 PowerShell 脚本批量拒绝取代更新
微软官方提供 Decline-SupersededUpdates.ps1 脚本(需从 Microsoft Docs 获取或基于标准模板编写),支持以下关键行为:
- 支持
-SkipDecline参数进行预检:仅统计有多少个取代更新,不实际操作,适合首次运行前验证 - 支持
-DeclineLastLevelOnly:只拒绝取代链末端(如 Update3),保留中间层(Update2),避免误拒依赖项 - 支持
-ExclusionPeriod 30:近30天内发布的取代更新暂不拒绝,给测试和回滚留出窗口 - 必须以管理员身份在 WSUS 服务器本地运行,且需先加载
UpdateServices模块
示例命令:
.\Decline-SupersededUpdates.ps1 -UpdateServer localhost -Port 8530 -SkipDecline .\Decline-SupersededUpdates.ps1 -UpdateServer localhost -Port 8530 -DeclineLastLevelOnly -ExclusionPeriod 14
⚠️ 注意:运行前务必备份 SUSDB 数据库(
sqlcmd -S .\WSUS -Q "BACKUP DATABASE [SUSDB] TO DISK='C:\backup\SUSDB.bak'"),脚本不可逆。
配合同步周期做定时自动化
单纯手动执行不够稳定。建议将脚本纳入 Windows 任务计划程序,与 WSUS 同步动作联动:
- 在“同步完成后”触发脚本(可通过监控
WsusUtil.exe syncstart日志或使用 PowerShell 监听Get-WsusServer | Get-WsusSubscription | Get-WsusUpdate状态) - 或设定固定周期(如每月第一个周五凌晨2点),同步后1小时再执行拒绝脚本
- 输出日志到文件(
-Verbose | Out-File C:\logs\wsus-decline-$(Get-Date -f yyyy-MM-dd).log),便于审计
关闭自动审批并清理已有冗余
自动审批会把所有匹配产品/分类的更新一键批准,包括大量已被取代的旧版,加剧问题:
- 进入 WSUS 控制台 → 选项 → 自动审批规则 → 禁用所有现有规则
- 手动检查“所有更新”视图,筛选状态为“已批准”且“被取代”的更新,右键 → “拒绝”(初期可辅助清理)
- 运行 WSUS 清理向导(选项 → 服务器清理向导),勾选“删除已拒绝的更新”和“删除未使用的更新文件”,但注意该操作耗时较长,建议在低峰期执行
补充建议:限制同步范围与下载策略
源头减负比后期清理更高效:
- 只勾选实际部署的操作系统和软件(如仅 Win10/11、Office 2021、.NET Framework,去掉 Win7/8、SQL Server 2012 等已淘汰项)
- 在“选项 → 产品和分类”中取消勾选“快速安装文件”,仅下载已批准更新的文件,避免磁盘爆满
- 若使用 Configuration Manager 1906+,启用 SUP 的“自动 WSUS 维护”功能,它会在每次同步后自动拒绝取代更新(无需额外脚本)
不复杂但容易忽略。











