1. WSUS 维护概述
WSUS 长期运行后会产生大量过期更新和冗余数据,定期维护可保持系统性能和节省磁盘空间。
维护任务
- 清理过期更新:删除已取代和过期的更新
- 删除拒绝更新:清理被拒绝的更新文件
- 压缩数据库:优化 SUSDB 数据库
- 重建索引:提升数据库查询性能
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 服务释放文件锁。