指定服务器管理器数据刷新周期,Windows Server Update Services (Configuration Manager) WSUS 维护指南 - Configuration Mana...

WSUS 和 Configuration Manager SUP 维护的完整指南

12/21/2020

本文内容

本文解决有关 Configuration Manager 环境的 WSUS 维护的一些常见问题。

原始产品版本:  Windows服务器、Windows Server Update Services、Configuration Manager

原始 KB 编号:   4490644

简介

问题通常与如何在 Configuration Manager 环境中正确运行此维护或运行此维护的运行时间一 样。 配置管理器管理员并不了解应运行 WSUS 维护的情况很常见。 我们中的大多数人只是设置 WSUS 服务器,因为它是 SUP (必备) 。 设置 SUP 后,我们关闭 WSUS 控制台并冒充它不存在。 遗憾的是,它对于 Configuration Manager 客户端和 WSUS/SUP 服务器的整体性能可能存在问题。

在了解需要完成此维护之后,你会想知道需要执行哪些维护以及需要执行维护多久。 答案是您应执行每月维护。 维护非常简单,对于从一开始就得到良好维护的 WSUS 服务器来说,无需很长时间。 但是,如果完成 WSUS 维护后已经过一段时间,则首次清理可能比较困难或耗时。 在随后的几个月中,它将容易得多或更快。

在支持 Configuration Manager 当前分支版本 1906 和更高版本的同时维护 WSUS

如果使用的是 Configuration Manager 当前分支版本 1906 或更高版本,我们建议您在顶级站点的软件更新点配置中启用 WSUS 维护选项,以在每个同步后自动执行清理过程。 它可有效处理本文中所述的所有清理操作,但 WSUS 数据库的备份和重新索引除外。 您仍应按计划自动备份 WSUS 数据库以及重新索引 WSUS 数据库。

59ed4c12c70d3e5f38b014fdf61b4e92.png

有关 Configuration Manager 中软件更新维护的信息,请参阅 软件更新维护。

重要的注意事项

备注

如果你正在利用 Configuration Manager 版本 1906中添加的维护功能,则无需考虑这些项目,因为 Configuration Manager 在每个同步后会处理清理。

在开始维护过程之前,请阅读本文中所有的信息和说明。

将 WSUS 与下游服务器一同使用时,WSUS 服务器从上到下添加,但应从底部向上删除。 同步或添加更新时,它们首先会转到上游 WSUS 服务器,然后向下复制到下游服务器。 执行清理操作并删除 WSUS 服务器中的项目时,应从层次结构底部开始。

WSUS 维护可以在同一层中的多台服务器上同时执行。 执行此操作时,请确保先完成一层,然后再移动到下一层。 下面的清理和重新索引步骤应在所有 WSUS 服务器上运行,而不管它们是否是副本 WSUS 服务器。 有关确定 WSUS 服务器是否为副本的信息,请参阅拒绝 取代的更新。

确保 SSP 在维护过程中不同步,因为它可能会导致丢失一些已完成的工作。 检查 SUP 同步计划,并在此过程中临时设置为手动。

7dc44e85653314819251711fe5eb23c0.png

如果主站点或管理中心有多个 SSP 位于 (CAS) 其中不共享 SUSDB,请考虑与网站上第一个 SUP 同步的 WSUS 服务器驻留在网站下面的层中。 例如,我的 CAS 网站有两个 SSP:

名为 New syncs with Microsoft Update 的一个,它在我的第一层 (Tier1) 。

名为 2012 的服务器与 New 同步,它将视为第二层。 可以在我执行所有其他 Tier2 服务器(例如主网站的单个 SUP)的同时清理它。

8977ee825030ede7d98dea7df394f4d0.png

执行 WSUS 维护

正确维护 WSUS 所需的基本步骤包括:

备份 WSUS 数据库

使用所需方法 (SUSDB) WSUS 数据库。 有关详细信息,请参阅 创建完整数据库备份。

创建自定义索引

虽然此过程是可选的,但建议使用,它会在后续清理操作期间显著提高性能。

如果使用的是 Configuration Manager 当前分支版本 1906 或更高版本,建议使用 Configuration Manager 创建索引。 若要创建索引,在最高网站的软件更新点配置中配置"向 WSUS 数据库添加非群集索引"选项。

ce67aa765a9d5e4f62b94c5ec819ffbc.png

如果使用旧版 Configuration Manager 或独立 WSUS 服务器,请按照以下步骤在 SUSDB 数据库中创建自定义索引。 对于每个 SUSDB,这是一个一次过程。

确保您具有 SUSDB数据库的备份。

使用 SQL Management Studio 以与重新索引WSUS数据库一节中所述的相同方式连接到 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]

如果之前已创建自定义索引,则再次运行脚本会导致类似以下错误:

Msg 1913,级别 16,状态 1,第 4 行

操作失败,因为表"dbo.tbLocalizedPropertyForRevision"上已存在名称为"nclLocalizedPropertyID"的索引或统计信息。

对 WSUS 数据库重新建立索引

若要将 WSUS 数据库重新 (SUSDB) ,请使用重新索引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 中运行,如下所示:

8f0bae5bec9d03787654e7e72951a9d5.png

670bdbfa40f71d3e3f5f7a86fb29687a.png

如果 SUSDB 已安装在 WID 上

如果 SUSDB 安装在 WID 上,SQL Server Management Studio Express 必须本地安装以运行重新索引脚本。 下面是确定要安装的 SQL Server Management Studio Express 的一种简单方法:

对于Windows Server 2012或更高版本:

转到 C:\Windows\WID\Log 并查找包含版本号的错误日志。

在如何确定版本、版本和更新版本的版本及其组件中查找SQL Server版本号。 此值告知您 WID (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 后,启动它,然后输入要连接到的服务器名称:

如果操作系统是Windows Server 2012或更高版本,请使用 \\.\pipe\MICROSOFT##WID\tsql\query 。

如果操作系统低于Windows Server 2012,请输入 \\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query 。

对于 WID,如果尝试使用 SQL Server Management Studio (SSMS) 连接到 SUSDB 时出现类似SSMS"以管理员方式运行 "选项。

5a750c16c88fd86afd8c9a246977c52e.png

如果 SUSDB 已安装在 SQL Server

如果在完整服务器上安装了 SUSDB,SQL Server启动 SQL Server Management Studio并输入服务器实例的名称 (如果需要,请在系统提示时) 实例。

提示

或者,调用的实用工具 sqlcmd 可用于运行重新索引脚本。 有关详细信息,请参阅 重新对 WSUS 数据库进行索引。

运行脚本

若要在 SQL Server Management Studio 或 SQL Server Management Studio Express 中运行脚本,请选择"新建查询",将该脚本粘贴到窗口中,然后选择"执行 "。 完成后,状态栏中将显示"已成功 执行 查询"消息。 " 结果 "窗格将包含与重新生成哪些索引相关的消息。

4a7c4bee594c074406585089de4e0b64.png

4e7ca3472b8d08772ca6f1cd55d5a847.png

拒绝取代的更新

拒绝 WSUS 服务器中取代的更新,以帮助客户端更高效地扫描。 在拒绝更新之前,请确保已部署取代的更新,并且不再需要取代的更新。 Configuration Manager 包括单独的清理,允许它根据指定条件使取代的更新过期。 有关详细信息,请参阅以下文章:

以下SQL查询可以针对 SUSDB 数据库运行,以快速确定取代的更新数。 如果取代的更新数大于 1500,则可能导致服务器端和客户端出现各种软件更新相关问题。

-- Find the number of superseded updates

Select COUNT(UpdateID) from vwMinimalUpdate where IsSuperseded=1 and Declined=0

如果使用的是 Configuration Manager 当前分支版本 1906 或更高版本,建议在最高站点的软件更新点配置中启用"根据取代规则拒绝 WSUS 中的过期更新"选项,自动拒绝取代的更新。

afe7e1c8b751c7696a05c46689f82091.png

使用此选项时,可以在同步过程完成后查看 WsyncMgr.日志文件拒绝的更新。 如果使用此选项,则无需使用本节稍后介绍的脚本 (只需手动运行该脚本,或将脚本设置为按计划运行脚本) 。

如果使用的是独立 WSUS 服务器或较旧版本的配置管理器,可以使用 WSUS 控制台手动拒绝取代的更新。 或者可以运行此 PowerShell 脚本。 然后,复制脚本并将其另 存为Decline-SupersededUpdatesWithExclusionPeriod.ps1 脚本文件。

备注

此脚本的提供如下。 在生产中使用它之前,应在实验室中完全测试它。 Microsoft 不保证以任何方式使用此脚本。 始终首先使用 参数运行脚本,获取将拒绝的取代 -SkipDecline 更新数的摘要。

如果 Configuration Manager设置为"立即过期"取代更新 (请参阅下面的) ,则 PowerShell 脚本可用于拒绝所有取代的更新。 应在配置管理器 /WSUS 层次结构中所有自治的 WSUS 服务器上完成。

729a448eea78b4aace91480e0545d04d.png

无需在设置为副本的 WSUS 服务器(如辅助站点 SSP)上运行 PowerShell 脚本。 若要确定 WSUS 服务器是否是副本,请检查 更新源 设置。

6949e92cedf5bef128b2ee56a0fbb0d6.png

如果未将更新配置为在 Configuration Manager 中立即过期,则 PowerShell 脚本必须以与 Configuration Manager 设置匹配的排除期运行,以等待取代更新过期的天数。 在这种情况下,需要 60 天,因为 SUP 组件属性配置为在取代的更新过期前等待两个月:

56bdbb99c87857360d9aceaf0ec38ae9.png

以下命令行演示了在 WSUS 服务器上运行 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 服务器上更新的信息,以及可以拒绝的更新数:

913786bfe79b8efe8dbebde81dea64d7.png

运行带 -ExclusionPeriod 60 的脚本,拒绝超过 60 天的取代更新:

2f79ec95fb5b6b8ec9b45940353a27b4.png

脚本运行时将显示输出和进度指示器。 请注意 SupersededUpdates.csv 文件,其中包含脚本拒绝的所有更新的列表:

daf8dee56d633c84bb39f34b350e8e68.png

备注

如果尝试使用上述 PowerShell 脚本拒绝取代的更新时出现问题,请参阅运行 Decline-SupersededUpdatesWithExclusionPeriod.ps1 脚本在连接到 WSUS 服务器时出现问题,或者运行疑难解答步骤时发生 401 错误。

在取代的更新被拒绝后,为了获得最佳性能,应再次对 SUSDB 重新索引。 有关相关信息,请参阅 对 WSUS 数据库重新建立索引。

运行 WSUS 服务器清理向导

WSUS 服务器清理向导提供了用于清理以下项目的选项:

未使用的更新和更新修订 (也称作过时更新)

不与服务器联系的计算机

不需要的更新文件

过期的更新

取代的更新

在 Configuration Manager环境中,计算机不与服务器联系和不需要的更新文件选项不相关,因为 Configuration Manager 管理软件更新内容和设备,除非在软件更新同步 设置 下选择了"创建所有 WSUS 报告事件"或"仅创建 WSUS 状态报告事件 " 选项。 如果配置了这些选项之一,则应考虑自动执行 WSUS 服务器清理以执行这两个选项的清理。

如果使用 Configuration Manager 当前分支版本 1906 或更高版本,则根据取代规则在 WSUS 中启用拒绝过期更新选项将基于 Configuration Manager中指定的取代规则处理过期更新和取代更新的拒绝。 在 Configuration Manager 当前分支版本 1906 中启用"从 WSUS 数据库中删除过时更新"选项可处理清理未使用的更新和更新修订 (过时更新) 。 建议在顶级站点上的软件更新点配置中启用这些选项,以允许 Configuration Manager 清理 WSUS 数据库。

62fcdacb6090491bef89bf4f9425cf58.png

如果您之前从未清理过 WSUS 数据库中的过时更新,此任务可能会过期。有关详细信息,你可以查看 WsyncMgr.log,并手动SQL帮助中指定的脚本!我的 WSUS已经运行多年,但一直未进行维护,清理向导会一直超时一次,这将允许来自 Configuration Manager 的后续尝试成功运行。 有关 Configuration Manager 中的 WSUS 清理和维护详细信息,请参阅文档。

对于独立 WSUS 服务器,或者如果你使用的是旧版 Configuration Manager,建议定期运行 WSUS 清理向导。 如果 WSUS 服务器清理向导从未运行过,并且 WSUS 已在生产中运行一段时间,则清理可能会用完。在这种情况下,首先使用步骤 2 和步骤 3 重新索引,然后仅选中未使用的更新和更新 修订 选项的情况下运行清理。

如果您从未运行 WSUS 清理向导,则使用未使用的更新和更新修订运行清理可能需要一些阶段。 如果它用完,请再次运行它,直到它完成,然后一次运行一个其他选项。 最后,选中所有选项后进行完全传递。 如果超时继续出现,请参阅 HELP 中的SQL Server替代项!我的 WSUS 已经运行多年,但一直没有完成维护,清理向导会不断超时。服务器清理向导或服务器清理向导可能需要SQL数天才能完成。

WSUS 服务器清理向导从 WSUS 控制台运行。 它位于"选项 "下,如下所示:

ccbf199bc89f5b2b0b9e8af2db87df65.png

有关详细信息,请参阅使用 服务器清理向导。

379b81e816f061ddd3cbf9eaa75974b4.png

报告已删除的项目数后,清理完成。 如果在 WSUS 服务器上未返回此信息,可以安全地假定清理已过。在这种情况下,你将需要再次启动它或使用替代SQL 。

39d19b941774cf6a16df9a9ab53eed8b.png

在取代的更新被拒绝后,为了获得最佳性能,应再次对 SUSDB 重新索引。 有关 相关信息,请参阅对 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 个月后。 记下此设置。

fb33ee9f5c2924deb91a233d60efd378.png

如果尚未备份 SUSDB 数据库,请执行备份,然后再继续。

使用 SQL Server Management Studio 连接到 SUSDB。

运行以下查询。 包含的行中的数字 90 应对应于此过程步骤 1 中的取代规则,以及与取代规则中配置的月数一致的正确天数 DECLARE @thresholdDays INT = 90 。 如果设置为立即过期,则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 以重新引入更新。

82c1501b8fe8d0e09c24b074eedf9c01.png

如果更新不再位于 WSUS 中,可以从 Microsoft 更新目录导入(如果更新尚未过期或已从目录中删除)。

8c25207fe057fb5a67376794b6a5e2f8.png

自动执行 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 服务器/SSP 很重要! 如果这样做,下游服务器最终可能会重新同步您刚刚尝试清除的所有更新。我在 AM 同步之前安排了这一天,所以有时间来在同步运行之前检查它。

需要/有用的链接:

WSUS 清理脚本

[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")`

| out-null

$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer();

$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,可以继续使用以下步骤。

上 一节中提及的 Weekend Scripter 博客文章包含此步骤的基本说明和疑难解答。 但是,我将在以下步骤中演练此过程。

打开 任务计划程序, 然后选择 创建任务。 在 "常规 "选项卡上,设置要作为大多数用户使用服务帐户 (运行 PowerShell 脚本的用户的任务) 。 选择 "无论用户是否登录, 都运行",然后根据需要添加说明。

b362d92f03212b09edbc366c9af4c953.png

在" 操作 "选项卡下,添加新操作并指定要运行的程序/脚本。 在这种情况下,我们需要使用 PowerShell,并指向我们希望它运行的 PS1 文件。 您可以使用 WSUS 清理脚本。 此脚本执行 Configuration Manager 当前分支版本 1906 未执行的清理选项。 如果使用独立 WSUS 或旧版 Configuration Manager,可以取消注释它们。 如果需要日志,可以按如下方式修改脚本的最后一行:

[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | out-null

$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer();

$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/警告。 可以忽略此警告。

27b863c5def11d72178ff15d18a6838d.png

在 "触发器" 选项卡上,将计划设置为每月一次或在任何需要的计划上。 同样,必须确保在整个清理和重新索引期间不同步 WSUS。

274b3e48d08e8eb26e4a2c2ccb08c883.png

设置要调整的其他任何条件或设置。 保存任务时,系统可能会提示您输入"运行为 "用户的 凭据。

您还可以使用这些步骤将 Decline-SupersededUpdatesWithExclusionPeriod.ps1脚本配置为 每三个月运行一次。 我通常将此脚本设置为在其他清理步骤之前运行,但仅在手动运行它并确保它成功完成之后。 我每三个月运行一次第一个星期六上午 12:00。

使用 SQLCMD 和任务计划程序为 WID 设置 SUSDB 重新索引

将 重新索引 WSUS 数据库脚本另存为 .sql (例如 ,SUSDBMaint.sql) 。

创建基本任务并命名:

34113212f82a6ce340c3a3ff1f069054.png

将此任务安排在预计清理完成运行大约 30 分钟后开始。 我的清理每第一个星期日上午 1:00 运行。 大约需要 30 分钟才能运行,我准备在启动索引前再多提供 30 分钟。 这意味着我将每第一个星期日的上午 2:00 安排此任务,如下所示:

abafc0e06646c5e25d7c2bccd772c824.png

选择操作以 启动程序。 在" 程序/脚本 "框中,键入以下命令。 参数后指定的文件 -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

fa3a67f088cae084130d39c3d8ba071e.png

你收到一条警告,与创建清理任务时收到警告类似。 选择 " 是"接受参数,然后选择" 完成" 以应用:

b2e02afea78a435fe4f3f6ddbbbf305a.png

可以通过强制脚本运行并查看日志中的错误来测试该脚本。 如果遇到问题,日志将告诉您原因。 通常,如果失败,运行该任务的帐户没有相应的权限,或者 WID 服务未启动。

在非 WID SUSD SQL中设置基本计划维护任务

备注

You must be a sysadmin in SQL Server to create or manage maintenance plans.

打开 SQL Server Management Studio 并连接到 WSUS 实例。 展开 "管理",右键单击"维护计划", 然后选择"新建维护计划"。 为计划命名。

39e28f21d19cf91b479644b023cd36b1.png

选择 "subplan1", 然后确保 工具箱 位于上下文中:

033601c2d16101319e6318e74cf59868.png

拖放任务 Execute T-SQL Statement Task:

8aa8d7eea572e09f1a759f775cac210c.png

右键单击它,然后选择 编辑。 复制并粘贴 WSUS 重新索引脚本,然后选择"确定 ":

7c0529937b59df14bb843606eb443534.png

将此任务安排在预计清理完成后大约 30 分钟运行。 我的清理每第一个星期日上午 1:00 运行。 大约需要 30 分钟才能运行,我准备在开始重新索引前再多提供 30 分钟。 这意味着我将计划此任务在每周日上午 2:00 运行一次。

b28f71b5e466be10124613ca671aeccd.png

在创建维护计划时,还应考虑将 SUSDB 的备份添加到计划中。 我通常先备份,然后再重新索引。 这可能会为计划增加更多时间。

汇总

在层次结构中运行时,WSUS 清理运行应从层次结构底部向上完成。 但是,当使用脚本拒绝取代的更新时,应从上到下执行运行。 拒绝取代的更新实际上只是更新的一种补充,而不是删除。 您实际上在此例中添加 了 一种审批类型。

由于在实际清理期间无法完成同步,因此建议夜间计划/完成所有任务。 然后,在计划的下一个同步前,检查它们是否于第二天上午通过日志记录完成。如果失败,一旦确定并解决了基础问题,可以在下一天晚上重新安排维护。

这些任务的运行速度可能更快或较慢,具体取决于环境,计划的时间安排应反映这一点。 希望它们速度更快,因为我的实验室环境通常比正常的生产环境慢一点。 我在拒绝脚本的时间上有点积极。 如果 Tier2 与 Tier3 重叠几分钟,则不会导致问题,因为未计划运行同步。

不同步会阻止拒绝从 Tier2 意外流入我的 Tier3 副本 WSUS 服务器。 我的确在 Tier3 拒绝和 Tier3 清理之间为自己提供额外时间,因为我想确保在运行清理之前拒绝脚本完成。

这会带来一个常见问题:由于我未同步,为什么我不应该同时运行所有清理和重新索引?

答案是你可能可以,但我不愿意。 如果我的世界各地的同事需要运行同步,我通过此计划将 WSUS 中孤立更新的风险降至最低。 并且我可以安排它重新运行,以完成第二天晚上。

时间

任务

12:00 AM

Tier1 -拒绝

12:15 AM

Tier2 -拒绝

12:30 AM

Tier3-Decline

1:00 AM

Tier3 WSUS Cleanup

2:00 AM

Tier3 Reindex

Tier2 WSUS Cleanup

3:00 AM

Tier1-Cleanup

第 2 层重新索引

4:00 AM

Tier1 Reindex

备注

如果你使用 Configuration Manager 当前分支版本 1906 或更高版本来执行 WSUS 维护,Configuration Manager 会使用自上而下的方法在同步后执行清理。 在此方案中,可以将 WSUS 数据库备份和重新索引作业安排在配置的同步计划之前运行,而无需担心任何其他步骤,因为 Configuration Manager 将处理所有其他操作。

有关 Configuration Manager 中的 SUP 维护详细信息,请参阅以下文章: