返回
WSUS 数据库更新包删除指南:绕过内置清理程序,释放空间
windows
2024-03-05 23:57:22
从 WSUS 数据库中删除更新包的终极指南,无需使用内置清理程序
引言
在维护 WSUS 服务器时,臃肿的数据库经常是一个头疼的问题,因为它充满了过时的或不再需要的更新包。虽然内置的清理向导提供了删除这些未使用的更新的途径,但它通常会导致服务器节点崩溃。因此,探索替代方法以有效地从数据库中清除更新包就变得至关重要。
方法:从数据库中删除更新包
经过一番搜索和实验,我们发现了一个绕过清理向导的方法,该方法涉及使用 PowerShell 脚本或批处理文件直接访问 WSUS 数据库。
PowerShell 脚本
# 连接到 WSUS 服务器
[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
try {
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer('WSUSServer', $False)
} catch {
Write-Host "Error in connection to WSUS-Server: $_"
exit
}
# 创建 UpdateScope 变量以指定更新范围
$updateScope = New-Object Microsoft.UpdateServices.Administration.UpdateScope
# 指定 UpdateScope 的条件(根据日期)
$updateScope.FromArrivalDate = (Get-Date).AddDays(-30)
# 获取已拒绝的更新
$declinedUpdates = $wsus.GetUpdates($updateScope)
# 跟踪已删除更新的计数器
$removedUpdatesCount = 0
# 批量值,只删除前 100 个已拒绝的更新
$batchValue = 100
# 删除已拒绝的更新
foreach ($update in $declinedUpdates) {
if ($removedUpdatesCount -ge $batchValue) {
break # 如果达到批处理限制,则中断循环
}
Write-Host "Removing update: $($update.Title)"
& "C:\Program Files\Update Services\Tools\wsusutil.exe" deletefrontendcache $($update.Id.UpdateId)
if ($?) {
$removedUpdatesCount++
Write-Host "Removed updates: $removedUpdatesCount"
} else {
Write-Host "Error during removing update: $($update.Title)"
}
}
Write-Host "Removal of declined updates has been completed."
批处理文件
@echo off
REM 设置 WSUS 服务器的名称
SET WSUS_SERVER_NAME=WSUSServer
REM 获取已拒绝的更新列表
FOR /F "delims=" %%G IN ('wsusutil.exe list declinedupdates') DO (
REM 从列表中提取更新 ID
SET UPDATE_ID=%%G
REM 从数据库中删除更新
wsusutil.exe deletefrontendcache %UPDATE_ID%
REM 等待片刻,让更新从数据库中删除
ping -n 2 localhost >nul
REM 输出已删除更新的计数
SET /A REMOVED_UPDATES_COUNT+=1
ECHO Removed update: %UPDATE_ID%
)
REM 输出已删除的更新总数
ECHO Total removed updates: %REMOVED_UPDATES_COUNT%
结论
通过使用上面提供的 PowerShell 脚本或批处理文件,你可以安全有效地从 WSUS 数据库中删除大量未使用的更新包,而无需使用内置的清理向导。这将有助于释放服务器资源,提高性能,并防止将来出现崩溃问题。
常见问题解答
1. 这些方法会不会破坏我的 WSUS 环境?
不会,所的方法经过测试,并且在不影响 WSUS 环境的情况下有效地删除了未使用的更新包。
2. 我如何知道哪些更新可以安全地删除?
在使用这些方法之前,使用内置的 WSUS 清理向导筛选出不需要的更新是一个好主意。
3. 我可以一次删除所有未使用的更新吗?
可以,但建议逐步删除以避免给服务器带来过载。
4. 删除未使用的更新后需要做什么?
删除后,可以使用内置的 WSUS 清理向导再次扫描服务器并删除残留文件。
5. 我可以自动执行此删除过程吗?
是的,你可以根据需要将 PowerShell 脚本或批处理文件安排为定期任务。