返回

WSUS 数据库更新包删除指南:绕过内置清理程序,释放空间

windows

从 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 脚本或批处理文件安排为定期任务。