Microsoft WSUS 和 Configuration Manager SUP 维护的完整指南
本文介绍有关Configuration Manager环境的 WSUS 维护的一些常见问题。
原始产品版本: Windows Server、Windows Server Update Services、Configuration Manager
原始 KB 数: 4490644
简介
问题通常与如何在Configuration Manager环境中正确运行此维护,或者应多久运行一次此维护一样。 出于良心Configuration Manager管理员不知道 WSUS 维护应该运行,这种情况并不少见。 我们大多数人只是设置 WSUS 服务器,因为它是软件更新点 (SUP) 的先决条件。 设置 SUP 后,我们将关闭 WSUS 控制台,并假装它不存在。 遗憾的是,Configuration Manager客户端和 WSUS/SUP 服务器的整体性能可能会出现问题。
了解需要完成此维护后,你想知道需要执行哪些维护,以及需要多久进行一次维护。 答案是应执行每月维护。 维护很简单,从一开始就维护良好的 WSUS 服务器不会花费很长时间。 但是,如果自 WSUS 维护完成以来已经有一段时间了,则首次清理可能更加困难或耗时。 在随后的几个月里,它会更容易或更快。
有关简洁的步骤和自动脚本的详细信息,请参阅 手动和自动 WSUS 数据库维护。
在支持当前分支版本 1906 及更高版本Configuration Manager时维护 WSUS
如果使用Configuration Manager当前分支版本 1906 或更高版本,建议在顶级站点的软件更新点配置中启用 WSUS 维护选项,以便在每次同步后自动执行清理过程。 它将有效处理本文中所述的所有清理操作,WSUS 数据库的备份和重新合并除外。 仍应自动备份 WSUS 数据库,并按计划重新编入 WSUS 数据库。
有关Configuration Manager中的软件更新维护的详细信息,请参阅软件更新维护。
重要注意事项
注意
如果正在利用在版本 1906 Configuration Manager中添加的维护功能,则无需考虑这些项,因为每次同步后Configuration Manager处理清理。
在开始维护过程之前,请阅读本文中的所有信息和说明。
使用 WSUS 和下游服务器时,WSUS 服务器将从上到下添加,但应从自下而上删除。 同步或添加更新时,先转到上游 WSUS 服务器,然后复制到下游服务器。 执行清理并从 WSUS 服务器中删除项时,应从层次结构底部开始。
WSUS 维护可以在同一层中的多个服务器上同时执行。 执行此操作时,请确保在转到下一层之前完成一个层。 应在所有 WSUS 服务器上运行下面所述的清理和重新编制索引步骤,无论它们是否是副本 WSUS 服务器。 有关确定 WSUS 服务器是否是副本的详细信息,请参阅 拒绝取代的更新。
确保 SUP 在维护过程中不会同步,因为这可能会导致某些已完成的工作丢失。 检查 SUP 同步计划,并在此过程中临时将其设置为手动。
如果主站点或管理中心的多个 SUP 位于不共享 SUSDB 的 CAS) (,请将与站点上的第一个 SUP 同步的 WSUS 服务器视为驻留在站点下的层中。 例如,我的 CAS 站点有两个 SUP:
- 名为 New syncs 与 Microsoft Update 的版本,它将成为我 (第 1 层) 的顶层。
- 名为“2012”的服务器与“New”同步,并将在第二层考虑使用。 可以同时清理它,同时我将执行所有其他 Tier2 服务器,例如主站点的单个 SUP。
执行 WSUS 维护
正确 WSUS 维护所需的基本步骤包括:
- 备份 WSUS 数据库
- 创建自定义域索引
- 为 WSUS 数据库重建索引
- 拒绝取代的更新并运行维护
- WSUS 服务器清理向导
备份 WSUS 数据库
使用所需的方法备份 WSUS 数据库 (SUSDB) 。 有关详细信息,请参阅创建完整数据库备份。
创建自定义域索引
此过程是可选的,但建议在后续清理操作期间大大提高性能。
如果使用Configuration Manager当前分支版本 1906 或更高版本,建议使用Configuration Manager创建索引。 若要创建索引,请在最顶层站点的软件更新点配置中配置“ 将非聚集索引添加到 WSUS 数据库 ”选项。
如果使用较旧版本的Configuration Manager或独立 WSUS 服务器,请按照以下步骤在 SUSDB 数据库中创建自定义索引。 对于每个 SUSDB,这是一个一次性的过程。
确保已 备份 SUSDB 数据库。
使用 SQL Management Studio 以与 WSUS 数据库部分 Reindex 中所述的方式连接到 SUSDB 数据库。
针对 SUSDB 运行以下脚本,创建两个自定义索引:
-- Create custom index in tbLocalizedPropertyForRevision USE [SUSDB] CREATE NONCLUSTERED INDEX [nclLocalizedPropertyID] ON [dbo].[tbLocalizedPropertyForRevision] ( [LocalizedPropertyID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -- Create custom index in tbRevisionSupersedesUpdate CREATE NONCLUSTERED INDEX [nclSupercededUpdateID] ON [dbo].[tbRevisionSupersedesUpdate] ( [SupersededUpdateID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
如果之前已创建自定义索引,则再次运行脚本会导致类似于以下错误的错误:
消息 1913, 级别 16, 状态 1, 行 4
操作失败,因为表“dbo.tbLocalizedPropertyForRevision”上已存在名为“nclLocalizedPropertyID”的索引或统计信息。
为 WSUS 数据库重建索引
若要重新编制 WSUS 数据库 (SUSDB) ,请使用 Reindex 作为 WSUS 数据库 T-SQL 脚本。
连接到 SUSDB 并执行重新编制索引的步骤有所不同,具体取决于 SUSDB 是在 SQL Server 中运行还是Windows 内部数据库 (WID) 。 若要确定 SUSDB 的运行位置,请检查位于子项的 SQLServerName
WSUS 服务器上的注册表项的 HKEY_LOCAL_MACHINE\Software\Microsoft\Update Services\Server\Setup
值。
如果该值仅包含服务器名称或 server\instance,则 SUSDB 在SQL Server上运行。 如果该值包含字符串 ##SSEE
或 ##WID
在其中,则 SUSDB 在 WID 中运行,如下所示:
如果已在 WID 上安装 SUSDB
如果 SUSDB 安装在 WID 上,则必须在本地安装 SQL Server Management Studio Express 才能运行重新编制索引脚本。 下面是确定要安装的 SQL Server Management Studio Express 版本的简单方法:
Windows Server 2012 及更高版本
转到
C:\Windows\WID\Log
并查找包含版本号的错误日志。如何确定 SQL Server 及其组件的版本、版本类别和更新级别 此值告知运行 WID 的 SERVICE Pack (SP) 级别。 在 Microsoft 下载中心搜索 SQL Server Management Studio Express 时包含 SP 级别。
对于 Windows Server 2008 R2:
- 使用记事本转到
C:\Windows\SYSMSI\SSEE\MSSQL.2005\MSSQL\LOG
并打开最后一个错误日志。 顶部将有一个版本号 (例如 9.00.4035.00 x64) 。 如何确定 SQL Server 及其组件的版本、版本类别和更新级别 此版本号告诉你正在运行的 Service Pack 级别。 在 Microsoft 下载中心搜索 SQL Server Management Studio Express 时包含 SP 级别。
- 使用记事本转到
安装 SQL Server Management Studio Express 后,启动它,并输入要连接到的服务器名称:
- 如果 OS 是Windows Server 2012或更高版本,请使用
\\.\pipe\MICROSOFT##WID\tsql\query
。 - 如果 OS 早于Windows Server 2012,请输入
\\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query
。
对于 WID,如果尝试使用 SQL Server Management Studio (SSMS) 连接到 SUSDB 时发生类似于以下错误,请尝试使用“以管理员身份运行”选项启动 SSMS。
如果 SUSDB 安装在SQL Server
如果 SUSDB 安装在完整SQL Server上,则启动SQL Server Management Studio,并在出现提示时输入服务器 (和实例的名称) 。
提示
或者,调用 sqlcmd
的实用工具可用于运行重新编制索引脚本。 有关更多信息,请参阅发行说明。
运行脚本
若要在 SQL Server Management Studio 或 SQL Server Management Studio Express 中运行脚本,请选择“新建查询”,将脚本粘贴到窗口中,然后选择“执行”。 完成后,状态栏中将显示 成功执行的查询 消息。 “ 结果 ”窗格将包含与重新生成的索引相关的消息。
拒绝取代的更新并运行维护
拒绝 WSUS 服务器中取代的更新,以帮助客户端更高效地进行扫描。 在拒绝更新之前,请确保已部署取代更新,并且不再需要被取代的更新。 Configuration Manager包含一个单独的清理,允许它基于指定的条件使被取代的更新过期。 有关详细信息,请参阅以下文章:
可以针对 SUSDB 数据库运行以下 SQL 查询,以便快速确定被取代的更新数。 如果被取代的更新数高于 1500,则可能会导致服务器和客户端上的各种软件更新相关问题。
-- Find the number of superseded updates
Select COUNT(UpdateID) from vwMinimalUpdate where IsSuperseded=1 and Declined=0
如果使用Configuration Manager当前分支版本 1906 或更高版本,我们建议通过在 WSUS 中根据最热门站点的软件更新点配置中的“取代规则”选项启用已过期的拒绝更新,自动拒绝被取代的更新。
使用此选项时,可以通过在同步过程完成后查看 WsyncMgr.log 文件来查看拒绝的更新数量。 如果使用此选项,则无需使用本部分后面所述的脚本, (手动运行它或设置为任务以按计划) 运行它。
如果使用的是独立 WSUS 服务器或较旧版本的 Configuration Manager,则可以使用 WSUS 控制台 手动拒绝被取代的更新 。 也可以运行此 PowerShell 脚本。 然后,将脚本复制并保存为 Decline-SupersededUpdatesWithExclusionPeriod.ps1 脚本文件。
注意
此脚本按原样提供。 在生产环境中使用它之前,应在实验室中对其进行完全测试。 Microsoft 不保证以任何方式使用此脚本。 始终先使用参数运行脚本 -SkipDecline
,以获取被拒绝的被取代更新数量的摘要。
如果将Configuration Manager设置为“立即过期”, (请参阅下) ,PowerShell 脚本可用于拒绝所有被取代的更新。 应在 Configuration Manager/WSUS 层次结构中的所有自治 WSUS 服务器上执行此操作。
无需在设置为副本的 WSUS 服务器(例如辅助站点 SUP)上运行 PowerShell 脚本。 若要确定 WSUS 服务器是否是副本,请检查 更新源 设置。
如果更新未配置为在Configuration Manager中立即过期,则必须使用与Configuration Manager设置匹配的排除期运行 PowerShell 脚本,以使被取代更新过期的天数。 在这种情况下,SUP 组件属性配置为等待两个月才能过期更新,需要 60 天时间:
以下命令行演示了 PowerShell 脚本可以运行的各种方法:
注意
在 WSUS 服务器上运行脚本时,请使用 LOCALHOST
而不是实际 SERVERNAME
脚本。
Decline-SupersededUpdatesWithExclusionPeriod.ps1 -UpdateServer SERVERNAME -Port 8530 –SkipDecline
Decline-SupersededUpdatesWithExclusionPeriod.ps1 -UpdateServer SERVERNAME -Port 8530 –ExclusionPeriod 60
Decline-SupersededUpdatesWithExclusionPeriod.ps1 -UpdateServer SERVERNAME -Port 8530
Decline-SupersededUpdatesWithExclusionPeriod.ps1 -UpdateServer SERVERNAME -UseSSL -Port 8531
运行脚本-SkipDecline
-ExclusionPeriod 60
并收集有关 WSUS 服务器上更新的信息,以及可以拒绝的更新数:
使用 -ExclusionPeriod 60 运行脚本,以拒绝超过 60 天的已取代更新:
脚本运行时将显示输出和进度指示器。 请注意 SupersededUpdates.csv 文件,其中将包含脚本拒绝的所有更新的列表:
注意
如果尝试使用上述 PowerShell 脚本拒绝取代更新时出现问题,请参阅 在连接到 WSUS 服务器时运行Decline-SupersededUpdatesWithExclusionPeriod.ps1脚本超时部分,或者在运行故障排除步骤时发生 401 错误 。
被取代的更新被拒绝后,为了获得最佳性能,应再次重新执行 SUSDB。 有关相关信息,请参阅 WSUS 数据库的 Reindex。
WSUS 服务器清理向导
WSUS 服务器清理向导提供用于清理以下项的选项:
- 未使用的更新和更新修订 (也称为过时更新)
- 计算机未与服务器联系
- 不需要的更新文件
- 过期更新
- 被取代的更新
在Configuration Manager环境中,不联系服务器和不需要更新文件选项的计算机不相关,因为Configuration Manager管理软件更新内容和设备,除非选择“创建所有 WSUS 报告事件”或“仅创建 WSUS 状态报告事件”选项软件更新同步设置。 如果已配置其中一个选项,则应考虑自动执行 WSUS 服务器清理以执行这两个选项的清理。
如果使用Configuration Manager当前分支版本 1906 或更高版本,则根据取代规则在 WSUS 中启用“拒绝过期更新”选项可根据Configuration Manager中指定的取代规则处理已过期更新和取代更新的下降。 在当前分支版本 1906 Configuration Manager 中启用 WSUS 数据库选项中的“从 WSUS 数据库中删除已过时更新”可处理未使用的更新和更新修订 (已过时的更新) 。 建议在顶层站点上的软件更新点配置中启用这些选项,以允许Configuration Manager清理 WSUS 数据库。
如果以前从未清理过过时 WSUS 数据库的更新,则此任务可能会超时。可以查看 WsyncMgr.log 以获取详细信息,并手动运行 HELP 中指定的 SQL 脚本!我的 WSUS 已经运行多年,但从未进行过维护,清理向导会保持超时一次,这将允许Configuration Manager的后续尝试成功运行。 有关Configuration Manager中的 WSUS 清理和维护的详细信息,请参阅文档。
对于独立的 WSUS 服务器,或者如果使用的是较旧版本的Configuration Manager,建议定期运行 WSUS 清理向导。 如果 WSUS 服务器清理向导从未运行过,并且 WSUS 已经生产了一段时间,则清理可能会超时。在这种情况下,请先使用 步骤 2 和 步骤 3 重新编制索引,然后运行清理,只检查 未使用的更新和更新修订 选项。
如果从未运行过 WSUS 清理向导,则使用 未使用的更新和更新修订 运行清理可能需要几次传递。 如果超时,请再次运行它,直到它完成,然后一次运行一个其他选项。 最后进行完整传递,并选中所有选项。 如果超时继续发生,请参阅 HELP 中的SQL Server替代项!我的 WSUS 已经运行多年,但从未进行过维护,清理向导会不断超时。服务器清理向导或 SQL 替代项可能需要数小时或数天才能完成。
WSUS 服务器清理向导从 WSUS 控制台运行。 它位于 “选项”下,如下所示:
有关详细信息,请参阅查看 SQL Server 错误日志。
报告已删除的项数后,清理工作将完成。 如果未在 WSUS 服务器上看到返回的此信息,则可以放心地假设清理已超时。在这种情况下,需要重新启动它或使用 SQL 替代项。
被取代的更新被拒绝后,为了获得最佳性能,应再次重新执行 SUSDB。 有关相关信息,请参阅 “Reindex the WSUS 数据库 ”部分。
故障排除
帮助 我的 WSUS 已经运行多年,从未进行过维护,清理向导不断超时
下面有两个不同的选项:
使用新的数据库重新安装 WSUS。 有许多与此相关的注意事项,包括初始同步的长度,以及针对 SUSDB 的完整客户端扫描,与差异扫描。
确保备 份 SUSDB 数据库,然后运行 重新编制索引。 完成后,请在 SQL Server Management Studio 或 SQL Server Management Studio Express 中运行以下脚本。 完成后,请按照上述所有说明运行维护。 最后一步是必需的,
spDeleteUpdate
因为存储过程仅删除未使用的更新和更新修订。
注意
在运行脚本之前,请按照 spDeleteUpdate 存储过程中的步骤缓慢运行 ,以提高执行的 spDeleteUpdate
性能。
DECLARE @var1 INT
DECLARE @msg nvarchar(100)
CREATE TABLE #results (Col1 INT)
INSERT INTO #results(Col1) EXEC spGetObsoleteUpdatesToCleanup
DECLARE WC Cursor
FOR
SELECT Col1 FROM #results
OPEN WC
FETCH NEXT FROM WC
INTO @var1
WHILE (@@FETCH_STATUS > -1)
BEGIN SET @msg = 'Deleting' + CONVERT(varchar(10), @var1)
RAISERROR(@msg,0,1) WITH NOWAIT EXEC spDeleteUpdate @localUpdateID=@var1
FETCH NEXT FROM WC INTO @var1 END
CLOSE WC
DEALLOCATE WC
DROP TABLE #results
在连接到 WSUS 服务器时运行Decline-SupersededUpdatesWithExclusionPeriod.ps1脚本超时,或者在运行时出现 401 错误
如果尝试使用 PowerShell 脚本拒绝取代的更新时出错,则可以针对 SUDB 运行替代 SQL 脚本。
如果Configuration Manager与 WSUS 一起使用,请检查软件更新点组件属性>取代规则,以查看被取代更新的过期速度,例如立即或在 X 个月之后。 为此名称添加备注。
如果尚未 备份 SUSDB 数据库,请在继续操作之前执行此操作。
使用SQL Server Management Studio连接到 SUSDB。
运行以下查询。 行中包含
DECLARE @thresholdDays INT = 90
的编号 90 应与此过程步骤 1 中的“取代规则”相对应,以及与在“取代规则”中配置的月数一致的正确天数。 如果此设置为立即过期,则 SQL 查询中的值应设置为@thresholdDays
零。-- Decline superseded updates in SUSDB; alternative to Decline-SupersededUpdatesWithExclusionPeriod.ps1 DECLARE @thresholdDays INT = 90 -- Specify the number of days between today and the release date for which the superseded updates must not be declined (i.e., updates older than 90 days). This should match configuration of supersedence rules in SUP component properties, if ConfigMgr is being used with WSUS. DECLARE @testRun BIT = 0 -- Set this to 1 to test without declining anything. -- There shouldn't be any need to modify anything after this line. DECLARE @uid UNIQUEIDENTIFIER DECLARE @title NVARCHAR(500) DECLARE @date DATETIME DECLARE @userName NVARCHAR(100) = SYSTEM_USER DECLARE @count INT = 0 DECLARE DU CURSOR FOR SELECT MU.UpdateID, U.DefaultTitle, U.CreationDate FROM vwMinimalUpdate MU JOIN PUBLIC_VIEWS.vUpdate U ON MU.UpdateID = U.UpdateId WHERE MU.IsSuperseded = 1 AND MU.Declined = 0 AND MU.IsLatestRevision = 1 AND MU.CreationDate < DATEADD(dd,-@thresholdDays,GETDATE()) ORDER BY MU.CreationDate PRINT 'Declining superseded updates older than ' + CONVERT(NVARCHAR(5), @thresholdDays) + ' days.' + CHAR(10) OPEN DU FETCH NEXT FROM DU INTO @uid, @title, @date WHILE (@@FETCH_STATUS > - 1) BEGIN SET @count = @count + 1 PRINT 'Declining update ' + CONVERT(NVARCHAR(50), @uid) + ' (Creation Date ' + CONVERT(NVARCHAR(50), @date) + ') - ' + @title + ' ...' IF @testRun = 0 EXEC spDeclineUpdate @updateID = @uid, @adminName = @userName, @failIfReplica = 1 FETCH NEXT FROM DU INTO @uid, @title, @date END CLOSE DU DEALLOCATE DU PRINT CHAR(10) + 'Attempted to decline ' + CONVERT(NVARCHAR(10), @count) + ' updates.'
若要检查进度,请在“结果”窗格中监视“消息”选项卡。
如果我发现我需要一个我拒绝的更新,该怎么办?
如果在Configuration Manager中决定需要这些已拒绝的更新之一,则可以通过右键单击更新并选择“批准”将其返回 WSUS 中。 将审批更改为 “未批准”,然后重新同步 SUP 以重新引入更新。
如果更新不再在 WSUS 中,则可以从 Microsoft 更新目录导入更新(如果尚未过期或已从目录中删除)。
自动执行 WSUS 维护
注意
如果使用 Configuration Manager 版本 1906 或更高版本,请通过在顶级站点的软件更新点配置中启用 WSUS 维护选项来自动执行清理过程。 这些选项处理 WSUS 服务器清理向导执行的所有清理操作。 但是,仍应按计划自动备份 WSUS 数据库并重新编制索引。
WSUS 维护任务可以自动执行,前提是先满足一些要求。
如果从未运行过 WSUS 清理,则需要手动执行前两次清理。 第二次手动清理应从第一次开始运行 30 天,因为某些更新和更新修订需要 30 天才能过时。在进行第二次清理之前,你不希望自动执行操作有具体原因。 第一次清理的运行时间可能会比正常时间长。 因此,无法判断此维护通常需要多长时间。 第二次清理是计算机正常运行情况的更好指标。 这一点很重要,因为你需要弄清楚每个步骤作为基线需要多长时间 (我也喜欢在) 添加大约 30 分钟的切换空间,以便你可以确定日程安排的时间。
如果有下游 WSUS 服务器,则需要先对它们执行维护,然后执行上游服务器。
若要计划 SUSDB 的重新编制索引,需要完整版本的 SQL Server。 Windows 内部数据库 (WID) 没有计划维护任务的功能,但SQL Server Management Studio Express。 也就是说,在使用 WID 的情况下,可以使用前面提到的任务计划程序
SQLCMD
。 如果执行此路由,请务必在此维护期间不要同步 WSUS 服务器/SUP! 如果执行此操作,下游服务器可能最终会重新同步刚刚尝试清理的所有更新。在 AM 同步之前,我将此时间安排在一夜之间,所以我有时间在同步运行之前对其进行检查。
需要/有用的链接:
WSUS 清理脚本
注意
在 WSUS 服务器上运行脚本时,请使用 LOCALHOST
而不是实际 SERVERNAME
脚本。 此外,请替换为 PORT
已用的。
[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")`
| out-null
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer("SERVERNAME",$true,PORT);
$cleanupScope = new-object Microsoft.UpdateServices.Administration.CleanupScope;
$cleanupScope.DeclineSupersededUpdates = $true
$cleanupScope.DeclineExpiredUpdates = $true
$cleanupScope.CleanupObsoleteUpdates = $true
$cleanupScope.CompressUpdates = $true
#$cleanupScope.CleanupObsoleteComputers = $true
$cleanupScope.CleanupUnneededContentFiles = $true
$cleanupManager = $wsus.GetCleanupManager();
$cleanupManager.PerformCleanup($cleanupScope);
在任务计划程序中设置 WSUS 清理任务
注意
如前所述,如果使用Configuration Manager当前分支版本 1906 或更高版本,请在顶级站点的软件更新点配置中启用 WSUS 维护选项,从而自动执行清理过程。 对于独立 WSUS 服务器或较早版本的Configuration Manager,可以继续使用以下步骤。
上一部分中提到的 “周末脚本” 博客文章包含此步骤的基本指导和故障排除。 但是,我将按照以下步骤指导你完成此过程。
打开 任务计划程序 ,然后选择 “创建任务”。 在“ 常规 ”选项卡上,将要运行 PowerShell 脚本的任务的名称设置为 (大多数人使用服务帐户) 。 选择 “运行是否登录用户”,然后根据需要添加说明。
在 “操作” 选项卡下,添加一个新操作,并指定要运行的程序/脚本。 在这种情况下,我们需要使用 PowerShell 并将其指向我们希望其运行的 PS1 文件。 可以使用 WSUS 清理脚本。 此脚本执行Configuration Manager当前分支版本 1906 不执行的清理选项。 如果使用的是独立 WSUS 或较旧版本的Configuration Manager,则可以取消注释它们。 如果想要日志,可以按如下所示修改脚本的最后一行:
注意
在 WSUS 服务器上运行脚本时,请使用
LOCALHOST
而不是实际SERVERNAME
脚本。 此外,请替换为PORT
已用的。[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | out-null $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer("SERVERNAME",$true,PORT); $cleanupScope = new-object Microsoft.UpdateServices.Administration.CleanupScope; # $cleanupScope.DeclineSupersededUpdates = $true # Performed by CM1906 # $cleanupScope.DeclineExpiredUpdates = $true # Performed by CM1906 # $cleanupScope.CleanupObsoleteUpdates = $true # Performed by CM1906 $cleanupScope.CompressUpdates = $true $cleanupScope.CleanupObsoleteComputers = $true $cleanupScope.CleanupUnneededContentFiles = $true $cleanupManager = $wsus.GetCleanupManager(); $cleanupManager.PerformCleanup($cleanupScope) | Out-File C:\WSUS\WsusClean.txt;
保存后,会在任务计划程序中收到 FYI/警告。 你可以忽略此警告。
在 “触发器” 选项卡上,将计划设置为每月一次,或按所需的任何计划设置。 同样,必须确保在整个清理和重新编制索引期间不同步 WSUS。
设置要调整的任何其他条件或设置。 保存任务时,可能会提示输入 运行方式 用户的凭据。
还可以使用这些步骤将 Decline-SupersededUpdatesWithExclusionPeriod.ps1 脚本配置为每三个月运行一次。 我通常将此脚本设置为在其他清理步骤之前运行,但前提是我已手动运行它并确保它成功完成。 我每三个月第一个星期天上午 12:00 运行一次。
使用 SQLCMD 和任务计划程序为 WID 设置 SUSDB 重新编制索引
将 WSUS 数据库脚本的 Reindex 保存为 .sql 文件 (例如 SUSDBMaint.sql) 。
创建基本任务并为其命名:
将此任务安排在你预期清理完成运行后大约 30 分钟开始。 我的清理工作在每个第一个星期天凌晨1:00运行。 运行大约需要 30 分钟,我将再给它 30 分钟,然后再开始重新编制索引。 这意味着我将在每个第一个星期日凌晨 2:00 安排此任务,如下所示:
选择“ 启动程序”操作。 在 “程序/脚本 ”框中,键入以下命令。 参数后
-i
指定的文件是步骤 1 中保存的 SQL 脚本的路径。 参数后-o
指定的文件是您希望将日志放置到的位置。 下面是一个示例:"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.exe" -S \\.\pipe\Microsoft##WID\tsql\query -i C:\WSUS\SUSDBMaint.sql -o c:\WSUS\reindexout.txt
你将收到一条警告,类似于创建清理任务时收到的警告。 选择 “是 ”以接受参数,然后选择 “完成” 以应用:
可以通过强制脚本运行并查看日志中的错误来测试该脚本。 如果遇到问题,日志将告诉你原因。 通常,如果失败,则运行任务的帐户没有适当的权限,或者 WID 服务未启动。
在 SQL 中为非 WID SUSDB 设置基本的计划维护任务
注意
必须是SQL Server中的 sysadmin 才能创建或管理维护计划。
启动 Microsoft SQL Server Management Studio 并连接到本地服务器实例。 展开 管理,右键单击 维护计划,然后选择 “新建维护计划”。 为计划命名。
选择 子计划 1 ,然后确保 工具箱 处于上下文中:
拖放任务执行 T-SQL 语句任务。
右键单击“Windows.edb”,然后选择“属性”。 复制并粘贴 WSUS 重新索引脚本,然后单击“确定”。
将此任务安排在你预期清理完成运行后大约 30 分钟运行。 我的清理工作在每个第一个星期天凌晨1:00运行。 运行大约需要 30 分钟,我将再给它 30 分钟,然后再开始重新编制索引。 这意味着我会安排这项任务在每个第一个星期日凌晨2:00运行。
在创建维护计划时,请考虑将 SUSDB 的备份也添加到计划中。 我通常先备起,然后重新编制索引。 它可能会为计划增加更多时间。
汇总
在层次结构中运行它时,应从层次结构底部向上运行 WSUS 清理运行。 但是,使用脚本拒绝取代的更新时,应从上到下完成运行。 拒绝被取代的更新实际上是更新的一种补充,而不是删除。 实际上,在本例中添加了一种 审批 类型。
由于在实际清理过程中无法完成同步,因此建议在一夜之间计划/完成所有任务。 然后在第二天早上通过日志记录检查完成情况,然后再进行下一次计划的同步。如果出现故障,在确定和解决基础问题后,可以将维护重新安排到第二天晚上。
这些任务的运行速度可能更快或更慢,具体取决于环境,计划的时间应该会反映这一点。 希望它们更快,因为我的实验室环境往往比正常的生产环境慢一点。 我对拒绝脚本的时机有点咄咄逼人。 如果 Tier2 与 Tier3 重叠几分钟,则不会导致问题,因为我的同步未计划运行。
不同步可防止从 Tier2 意外流入第 3 层副本 WSUS 服务器的下降。 我确实给自己额外的时间在第 3 层下降和第 3 层清理之间, 因为我肯定想确保拒绝脚本完成之前运行我的清理。
它提出了一个常见的问题:由于我没有同步,为什么我不应该同时运行所有的清理和重新检查?
答案是,你可能可以,但我不会。 如果我在全球的同事需要运行同步,按照此计划,我会最大程度地降低 WSUS 中孤立更新的风险。 我可以安排它重新运行到第二天晚上完成。
时间 | 层 | 任务 |
---|---|---|
凌晨 12:00 | Tier1-Decline | |
0:15 | 层 2-拒绝 | |
0:30 | Tier3-Decline | |
1:00 | 第 3 层 WSUS 清理 | |
凌晨 2:00 | Tier3 Reindex | 第 2 层 WSUS 清理 |
上午 3:00 | Tier1-Cleanup | Tier2 Reindex |
4:00 AM | Tier1 Reindex |
注意
如果使用Configuration Manager当前分支版本 1906 或更高版本来执行 WSUS 维护,Configuration Manager使用自上而下的方法进行同步后执行清理。 在此方案中,可以计划 WSUS 数据库备份和重新修复作业在配置的同步计划之前运行,而无需担心任何其他步骤,因为Configuration Manager将处理其他一切。
有关非连续命名空间的更多信息,请参阅以下文章: