WSUS 清理与维护

WSUS 更新服务 · 第 7 篇 · 适用于 Windows Server 2019 / 2022 / 2025

📑 目录

  1. WSUS 维护概述
  2. 服务器清理向导
  3. 数据库索引重建
  4. 定期维护计划
  5. 常见问题

1. WSUS 维护概述

WSUS 长期运行后会产生大量过期更新和冗余数据,定期维护可保持系统性能和节省磁盘空间。

维护任务

2. 服务器清理向导

1

打开WSUS 管理控制台 → 点击服务器名称 WSUS01 → 在右侧"操作"面板点击"服务器清理向导"

2

勾选所有清理选项:删除未使用的更新删除过期的更新删除拒绝的更新删除不需要的更新文件删除已超过 30 天未联系服务器的计算机

3

点击"下一步" → 点击"清理" → 等待清理过程完成(可能需要数小时,取决于数据量)

4

查看清理结果摘要:显示释放的磁盘空间和删除的更新数量 → 点击"完成"

PowerShell - 执行清理
# 执行 WSUS 清理(所有选项)
$wsus = Get-WsusServer
$cleanupScope = New-Object Microsoft.UpdateServices.Administration.CleanupScope
$cleanupScope.CleanupObsoleteUpdates = $true
$cleanupScope.CleanupUnneededContentFiles = $true
$cleanupScope.CompressUpdates = $true
$cleanupScope.DeclineExpiredUpdates = $true
$cleanupScope.DeclineSupersededUpdates = $true
$cleanupScope.CleanupObsoleteComputers = $true

$wsus.PerformCleanup($cleanupScope)

3. 数据库索引重建

1

下载微软官方 WSUS 索引重建脚本:WsusDBMaint.sql(从微软 TechNet 脚本中心获取)

2

打开SQL Server Management Studio(WID 模式需使用 \\.\pipe\MICROSOFT##WID\tsql\query 连接)

3

选择 SUSDB 数据库 → 打开索引重建脚本 → 点击"执行" → 等待索引重建完成

PowerShell - 重建索引
# 使用 sqlcmd 重建 WID 数据库索引
$sqlInstance = "\\.\pipe\MICROSOFT##WID\tsql\query"
$sqlScript = @"
USE SUSDB;
DECLARE @TableName NVARCHAR(255);
DECLARE @SQL NVARCHAR(MAX);
DECLARE cur CURSOR FOR
    SELECT '[' + SCHEMA_NAME(t.schema_id) + '].[' + t.name + ']'
    FROM sys.tables t;
OPEN cur;
FETCH NEXT FROM cur INTO @TableName;
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SQL = 'ALTER INDEX ALL ON ' + @TableName + ' REBUILD;';
    EXEC sp_executesql @SQL;
    FETCH NEXT FROM cur INTO @TableName;
END;
CLOSE cur;
DEALLOCATE cur;
"@

sqlcmd -S $sqlInstance -Q $sqlScript

4. 定期维护计划

1

打开任务计划程序taskschd.msc)→ 点击"创建基本任务"

2

输入名称:WSUS Monthly Cleanup → 触发器选择"每月"→ 选择每月第一个周日

3

操作选择"启动程序" → 程序:PowerShell.exe,参数:-File C:\Scripts\WSUS-Cleanup.ps1

4

点击"完成"创建计划任务。建议在同步完成后运行清理

PowerShell - 维护脚本
# WSUS 定期维护脚本(保存为 WSUS-Cleanup.ps1)
$wsus = Get-WsusServer

# 1. 拒绝被取代的更新
Get-WsusUpdate | Where-Object {$_.Update.IsSuperseded -and $_.Update.ApprovalCount -eq 0} |
    Deny-WsusUpdate

# 2. 执行服务器清理
$cleanupScope = New-Object Microsoft.UpdateServices.Administration.CleanupScope
$cleanupScope.CleanupObsoleteUpdates = $true
$cleanupScope.CleanupUnneededContentFiles = $true
$cleanupScope.DeclineSupersededUpdates = $true
$wsus.PerformCleanup($cleanupScope)

# 3. 记录日志
Write-Output "[$((Get-Date).ToString())] WSUS cleanup completed." >> "E:\WSUS\Cleanup.log"

5. 常见问题

Q1:清理耗时太长

大量数据时清理可能需要数小时。建议先拒绝被取代的更新,分批执行清理。

Q2:清理后磁盘空间未释放

确认勾选了"删除不需要的更新文件"选项。可能需要重启 WSUS 服务释放文件锁。