共用方式為


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 資料庫維護

維護 WSUS,同時支援最新分支版本 1906 和更新版本Configuration Manager

如果您使用最新分支版本 1906 或更新版本Configuration Manager,建議您在頂層月臺的軟體更新點設定中啟用WSUS 維護選項,以在每次同步處理之後自動執行清除程式。 它會有效地處理本文所述的所有清除作業,但 WSUS 資料庫的備份和重新編制索引除外。 您仍應依排程自動備份 WSUS 資料庫以及重新編制 WSUS 資料庫。

軟體更新點元件屬性視窗中 WSUS 維護選項的螢幕擷取畫面。

如需Configuration Manager中軟體更新維護的詳細資訊,請參閱軟體更新維護

重要考量

注意

如果您使用已在 Configuration Manager 1906 版中新增的維護功能,則不需要考慮這些專案,因為Configuration Manager會在每次同步處理之後處理清除。

  1. 開始維護程式之前,請先閱讀本文中的所有資訊和指示。

  2. 搭配下游伺服器使用 WSUS 時,會從上而下新增 WSUS 伺服器,但應該從下往上移除。 同步處理或新增更新時,它們會先移至上游 WSUS 伺服器,然後向下複寫至下游伺服器。 執行清除並從 WSUS 伺服器移除專案時,您應該從階層底部開始。

  3. WSUS 維護可以在相同層級的多部伺服器上同時執行。 這樣做時,請先確定已完成一個層級,再移至下一個層。 不論它們是否為複本 WSUS 伺服器,下面所述的清除和重新編制索引步驟都應該在所有 WSUS 伺服器上執行。 如需判斷 WSUS 伺服器是否為複本的詳細資訊,請參閱 拒絕已取代的更新

  4. 請確定 SUP 不會在維護程式期間同步處理,因為這可能會導致某些已完成的工作遺失。 請檢查 SUP 同步排程,並在此程式期間暫時將其設定為手動。

    [在排程上啟用同步處理] 設定的螢幕擷取畫面。

  5. 如果您有多個主要月臺或管理中心的 SUP 位於 CAS) (,但未共用 SUSDB,請將與月臺上第一個 SUP 同步處理的 WSUS 伺服器視為位於月臺下層。 例如,我的 CAS 網站有兩個 SUP:

    • 名為 New 的會與 Microsoft Update 同步處理,它是我的第一層 (第 1 層) 。
    • 名為 “2012” 的伺服器會與 “New” 同步,並且系統可能將其視為第二層。 您可以在執行所有其他第 2 層伺服器時進行清除,例如主要月臺的單一 SUP。

    兩個範例 SUP 的螢幕擷取畫面。

執行 WSUS 維護

適當 WSUS 維護所需的基本步驟包括:

  1. 備份 WSUS 資料庫
  2. 建立自訂索引
  3. 重新編制 WSUS 資料庫的索引
  4. 拒絕已取代的更新並執行維護
  5. WSUS 伺服器清理精靈。

備份 WSUS 資料庫

使用所需的 方法 (SUSDB) 備份 WSUS 資料庫。 如需詳細資訊,請參閱建立完整資料庫備份

建立自訂索引

此程式是選擇性的,但建議使用,可大幅改善後續清除作業期間的效能。

如果您使用 Configuration Manager最新分支版本 1906 或更新版本,建議您使用 Configuration Manager 來建立索引。 若要建立索引,請在最上層月臺的軟體更新點設定中設定 [將 非叢集索引新增至 WSUS 資料庫 ] 選項。

Configuration Manager 的 SUP 設定中的 [將非叢集索引新增到 WSUS 資料庫] 選項的位置。

如果您使用舊版的 Configuration Manager 或獨立 WSUS 伺服器,請遵循下列步驟在 SUSDB 資料庫中建立自訂索引。 針對每個 SUSDB,這是一次性程式。

  1. 請確定您有 SUSDB 資料庫的 備份

  2. 使用 SQL Management Studio 連線到 SUSDB 資料庫,方式與 重新編制 WSUS 資料庫重新編制索 引一節中所述的方式相同。

  3. 針對 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, Level 16, State 1, Line 1
    作業失敗,因為 'dbo.tbLocalizedPropertyForRevision' 資料表上已有名稱為 'nclLocalizedPropertyID' 的索引或統計資料。

重新編制 WSUS 資料庫的索引

若要重新編制 WSUS 資料庫 (SUSDB) 的索引,請使用 重新編制 WSUS 資料庫 T-SQL 腳本的索引。

連線到 SUSDB 並執行重新編制索引的步驟不同,取決於 SUSDB 是在 SQL Server 中執行,還是Windows 內部資料庫 (WID) 。 若要判斷 SUSDB 的執行位置,請檢查位於子機碼之 WSUS 伺服器 HKEY_LOCAL_MACHINE\Software\Microsoft\Update Services\Server\Setup 上的登錄專案值 SQLServerName

如果值只包含伺服器名稱或 server\instance,SUSDB 就會在SQL Server上執行。 如果值包含字串 ##SSEE##WID 在其中,SUSDB 會在 WID 中執行,如下所示:

SqlServerName-SSEE 的螢幕擷取畫面。

SqlServerName-WID 的螢幕擷取畫面。

如果 SUSDB 已安裝在 WID 上

如果 SUSDB 已安裝在 WID 上,SQL Server Management Studio Express 必須在本機安裝,才能執行 reindex 腳本。 以下是判斷要安裝的 SQL Server Management Studio Express 版本的簡單方式:

  • Windows Server 2012 及更新版本

    • 移至 C:\Windows\WID\Log 並尋找包含版本號碼的錯誤記錄檔。

    • 如何判斷 SQL Server 及其元件的版本、版次及更新層級 此值會告訴您 WID 執行的 SP) 層級 (哪個 Service Pack。 在 Microsoft下載中心搜尋 SQL Server Management Studio Express 時包含 SP 層級。

  • Windows Server 2008 R2 (KB3133954)

    • 移至 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,如果嘗試使用 SSMS) 連線到 SUSDB 時發生類似下列的錯誤 SQL Server Management Studio (,請嘗試使用 [以系統管理員身分執行] 選項啟動 SSMS。

無法連線到伺服器錯誤的螢幕擷取畫面。

如果 SUSDB 已安裝在 SQL Server

如果 SUSDB 已安裝在完整SQL Server上,請啟動 SQL Server Management Studio,並在出現提示時視需要輸入伺服器 (和實例的名稱) 。

提示

或者,稱為 的 sqlcmd 公用程式可以用來執行 reindex 腳本。 如需詳細資訊,請參閱版本資訊

執行指令碼

若要在 SQL Server Management Studio 或 SQL Server Management Studio Express 中執行腳本,請選取 [新增查詢],在視窗中貼上腳本,然後選取 [執行]。 完成時,狀態列中會顯示 已成功執行的查詢 訊息。 [ 結果] 窗格將包含與重建哪些索引相關的訊息。

執行 SQL 陳述式。

成功記錄檔的螢幕擷取畫面。

拒絕已取代的更新並執行維護

拒絕 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 中的過期更新] 選項,以自動拒絕已取代的更新。

[根據 WSUS 維護] 索引標籤下的 [根據取代規則拒絕 WSUS 中過期更新] 選項的螢幕擷取畫面。

當您使用此選項時,您可以檢閱同步處理常式完成之後的 WsyncMgr.log 檔案,以查看有多少更新遭到拒絕。 如果您使用此選項,則不需要使用本節稍後所述的腳本, (手動執行它或設定為工作,以依排程) 執行它。

如果您使用獨立 WSUS 伺服器或舊版組態管理員,您可以使用 WSUS 主控台 手動拒絕已取代的更新 。 或者,您可以執行此 PowerShell 腳本。 然後,將腳本複製並儲存為 Decline-SupersededUpdatesWithExclusionPeriod.ps1 腳本檔案。

注意

此腳本會以目前狀態提供。 在生產環境中使用它之前,應該先在實驗室中進行完整測試。 Microsoft 不保證以任何方式使用此腳本。 請一律先使用 -SkipDecline 參數執行腳本,以取得將拒絕多少個已取代更新的摘要。

如果Configuration Manager設定為[立即過期] 取代的更新 (請參閱下) ,PowerShell 腳本可用來拒絕所有已取代的更新。 它應該在Configuration Manager/WSUS 階層中的所有自發WSUS 伺服器上完成。

[取代規則] 索引標籤下 [立即過期已取代的更新] 選項的螢幕擷取畫面。

您不需要在設定為複本的 WSUS 伺服器上執行 PowerShell 腳本,例如次要月臺 SUP。 若要判斷 WSUS 伺服器是否為複本,請檢查 [更新來源 ] 設定。

[更新來源和 Proxy 伺服器] 選項的螢幕擷取畫面。

如果更新未設定為在Configuration Manager中立即過期,則 PowerShell 腳本必須以符合已取代更新到期天數之Configuration Manager設定的排除期間執行。 在此情況下,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

使用 和 -ExclusionPeriod 60 執行腳本 -SkipDecline ,以收集 WSUS 伺服器上更新的相關資訊,以及可拒絕的更新數目:

Windows PowerShell 視窗執行 SkipDecline 和 ExclusionPeriod 60。

使用 -ExclusionPeriod 60執行腳本,以拒絕超過 60 天的已取代更新:

[Windows PowerShell] 視窗的螢幕擷取畫面,其中 ExclusionPeriod 60 正在執行。

腳本執行時會顯示輸出和進度指標。 請注意 SupersededUpdates.csv 檔案,其中包含腳本拒絕的所有更新清單:

Windows PowerShell輸出和進度指示器的螢幕擷取畫面。

注意

如果嘗試使用上述 PowerShell 腳本來拒絕取代的更新時發生問題,請參閱 執行Decline-SupersededUpdatesWithExclusionPeriod.ps1腳本在連線到 WSUS 伺服器時逾時一節,或執行 時發生 401 錯誤 以進行疑難排解步驟。

在遭到取代的更新遭到拒絕之後,為了達到最佳效能,應該再次重新編制 SUSDB 的索引。 如需相關資訊,請 參閱重新編制 WSUS 資料庫的索引

WSUS 伺服器清理精靈。

WSUS 伺服器清除精靈提供清除下列專案的選項:

  • 未使用的更新和更新修訂 (也稱為過時更新)
  • 未連絡伺服器的電腦
  • 不需要的更新檔案
  • 過期的更新
  • 已取代的更新

在Configuration Manager環境中,[未連絡伺服器的電腦] 和 [不需要的更新檔案] 選項不相關,因為Configuration Manager管理軟體更新內容和裝置,除非已選取 [建立所有 WSUS 報告事件] 或 [僅建立 WSUS 狀態報表事件] 選項軟體更新同步設定。 如果您已設定其中一個選項,您應該考慮將 WSUS 伺服器清理自動化,以執行這兩個選項的清除。

如果您使用Configuration Manager最新分支 1906 版或更新版本,則啟用 [根據取代規則拒絕 WSUS 中的過期更新] 選項會根據 Configuration Manager 中指定的取代規則來處理過期更新和取代更新的拒絕。 在最新分支版本 1906 中啟用 [從 WSUS 資料庫移除過時的更新] Configuration Manager 選項,可) (清除未使用的更新和更新修訂。 建議您在頂層月臺的軟體更新點設定中啟用這些選項,以允許Configuration Manager清除 WSUS 資料庫。

[從 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 主控台執行。 它位於 [ 選項]下方,如下所示:

[WSUS 伺服器清除精靈位置] 頁面的螢幕擷取畫面。

如需詳細資訊,請參閱檢視 SQL Server 錯誤紀錄檔

[WSUS 伺服器清除精靈] 起始頁面的螢幕擷取畫面。

報告已移除的專案數之後,清除就會完成。 如果您在 WSUS 伺服器上看不到傳回的這項資訊,可以放心地假設清除逾時。在此情況下,您必須重新開機它,或使用 SQL 替代專案

結束時的 WSUS 伺服器清理精靈。

在遭到取代的更新遭到拒絕之後,為了達到最佳效能,應該再次重新編制 SUSDB 的索引。 如需相關資訊,請參閱 重新編制 WSUS 資料庫 的索引一節。

疑難排解

說明 我的 WSUS 已執行數年,但從未完成維護,而且清除精靈會讓時間逾時

這裡有兩個不同的選項:

  1. 使用全新的資料庫重新安裝 WSUS。 有一些相關注意事項,包括初始同步處理的長度,以及針對 SUSDB 的完整用戶端掃描,以及差異掃描。

  2. 請確定您有 SUSDB 資料庫的 備份 ,然後執行 reindex。 完成時,請在 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

執行Decline-SupersededUpdatesWithExclusionPeriod.ps1腳本會在連線到 WSUS 伺服器時逾時,或執行時發生 401 錯誤

如果您嘗試使用 PowerShell 腳本來拒絕已取代的更新時發生錯誤,則可以針對 SUDB 執行替代的 SQL 腳本。

  1. 如果Configuration Manager與 WSUS 一起使用,請檢查軟體更新點元件屬性 > 取代規則,以查看取代更新過期的速度,例如在X個月之後立即或之後。 記下此名稱。

    取代規則的螢幕擷取畫面。

  2. 如果您尚未 備份 SUSDB 資料庫,請先進行,再繼續進行。

  3. 使用 SQL Server Management Studio 連線到 SUSDB。

  4. 執行下列查詢。 包含 的行 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.'
    
  5. 若要檢查進度,請監視 [結果] 窗格中的 [訊息] 索引卷標。

如果我發現我需要其中一個我拒絕的更新,該怎麼辦?

如果您決定在Configuration Manager中需要其中一個已拒絕的更新,您可以在 WSUS 中以滑鼠右鍵按一下更新,然後選取 [核准],以將其回復。 將核准變更為 [未核准],然後重新同步處理 SUP 以重新傳回更新。

WSUS 核准更新畫面的螢幕擷取畫面。

如果更新已不在 WSUS 中,則如果更新尚未過期或從目錄中移除,則可從 Microsoft Update Catalog 匯入。

如何匯入 WSUS 中的更新。

自動化 WSUS 維護

注意

如果您使用 Configuration Manager 1906 版或更新版本,請在頂層月臺的軟體更新點設定中啟用WSUS 維護選項,以自動化清除程式。 這些選項會處理 WSUS 伺服器清除精靈所執行的所有清除作業。 不過,您仍應依排程自動備份並重新編制 WSUS 資料庫的索引。

假設先符合一些需求,就可以自動化 WSUS 維護工作。

  1. 如果您從未執行過 WSUS 清除,則必須手動執行前兩個清除。 您的第二次手動清除應該從第一次執行 30 天,因為某些更新和更新修訂需要 30 天的時間才能淘汰。在您第二次清除之前,您不想要自動化的原因有特定原因。 您的第一次清除可能會比一般執行更久。 因此,您無法判斷這項維護通常需要多久的時間。 第二次清除是機器正常狀況的更佳指標。 這很重要,因為您需要瞭解每個步驟作為基準 (我也想要新增大約 30 分鐘的切換空間) ,以便判斷排程的時間。

  2. 如果您有下游 WSUS 伺服器,您必須先對它們執行維護,然後再執行上游伺服器。

  3. 若要排程 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,您可以繼續使用下列步驟。

上一節所述的 週末腳本工具 部落格文章包含此步驟的基本指示和疑難排解。 不過,我會在下列步驟中逐步引導您完成此程式。

  1. 啟 [工作排程器] ,然後選 取 [建立工作]。 在 [ 一般 ] 索引標籤上,將工作名稱、您想要執行 PowerShell 腳本的使用者設定為 (大部分的人都會使用服務帳戶) 。 選 取 [執行使用者是否登入],然後視需要新增描述。

    [WSUS 建立工作] 畫面的螢幕擷取畫面。

  2. 在 [ 動作] 索 引標籤下,新增動作,並指定您要執行的程式/腳本。 在此情況下,我們需要使用 PowerShell,並將它指向我們想要執行的 PS1 檔案。 您可以使用 WSUS 清除腳本。 此腳本會執行最新分支版本 1906 Configuration Manager不會執行的清除選項。 如果您使用獨立 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 新增一行指令碼,以啟動工作。

  3. 在 [ 觸發程式] 索引卷 標上,設定您的排程一個月一次,或根據您想要的任何排程。 同樣地,您必須確保在整個清除和重新編制索引時間期間不會同步處理 WSUS。

    為工作設定 WSUS 編輯觸發器。

  4. 設定您也想要調整的任何其他條件或設定。 當您儲存工作時,系統可能會提示您輸入 執行身 分使用者的認證。

  5. 您也可以使用這些步驟,將 Decline-SupersededUpdatesWithExclusionPeriod.ps1 腳本設定為每三個月執行一次。 我通常會將此腳本設定為在其他清除步驟之前執行,但只有在我手動執行並確定它已順利完成之後才執行。 我每隔三個月在第一個星期日上午 12:00 執行。

使用 SQLCMD 和工作排程器設定 WID 的 SUSDB 重新編制索引

  1. WSUS 資料庫腳本的 Reindex 儲存 為 .sql 檔案 (例如 SUSDBMaint.sql) 。

  2. 建立基本工作並為其命名:

    WSUS [建立基本工作精靈] 畫面。

  3. 將此工作排程為在您預期清除完成後約 30 分鐘開始執行。 我的清除作業會在每個星期日上午 1:00 執行。 大約需要 30 分鐘的時間才能執行,而我要再給它 30 分鐘,再開始重新編制索引。 這表示我會在每一個星期日上午 2:00 排程此工作,如下所示:

    在 [建立基本工作精靈] 中,為該工作設定頻率。

  4. 選取動作以 啟動程式。 在 [ 程式/腳本] 方塊中,輸入下列命令。 參數之後指定的 -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

    [建立基本工作精靈] 中的指令碼。

  5. 您會收到類似您在建立清除工作時收到的警告。 選取 [是 ] 以接受引數,然後選取 [ 完成 ] 以套用:

    [工作排程器] 確認快顯視窗。

  6. 您可以強制腳本執行並檢閱記錄檔中是否有錯誤,以測試腳本。 如果您遇到問題,記錄檔會告訴您原因。 通常,如果失敗,執行工作的帳戶就不會有適當的許可權,或 WID 服務未啟動。

在 SQL 中為非 WID SUSDB 設定基本的排程維護工作

注意

您必須是 SQL Server 中的系統管理員,才能建立或管理維護計畫。

  1. SQL Server Management Studio並聯機到您的 WSUS 實例。 展開 [管理],以滑鼠右鍵按一下 [ 維護計畫],然後選取 [ 新增維護計畫]。 為您的計畫命名。

    為您的 WSUS 維護計畫輸入名稱。

  2. 取子計畫 1 ,然後確定您的 [工具箱 ] 在內容中:

    確認您的工具箱在內容中。

  3. 拖放工作 [執行 T-SQL 陳述式工作]。

    [執行 T-SQL 語句工作] 選項的螢幕擷取畫面。

  4. 用滑鼠右鍵按一下 Windows.edb,然後選取 [屬性]。 複製並貼上 WSUS 重新索引指令碼,然後按一下 [確定]。

    複製並貼上 WSUS reindex 腳本的螢幕擷取畫面。

  5. 將此工作排程為在您預期清除完成執行後約 30 分鐘執行。 我的清除作業會在每個星期日上午 1:00 執行。 執行大約需要 30 分鐘的時間,而我要再給它 30 分鐘,再開始重新編制索引。 這表示我會將此工作排程為在每一個星期日上午 2:00 執行。

    WSUS [新增作業排程] 畫面。

  6. 建立維護計畫時,也請考慮將 SUSDB 的備份加入計畫中。 我通常會先備份,然後重新編制索引。 這可能會為排程增加更多時間。

融會貫通

在階層中執行時,應該從階層底部向上執行 WSUS 清除。 不過,使用腳本來拒絕已取代的更新時,應該從上而下執行。 拒絕已取代的更新實際上是更新的新增類型,而不是移除。 在此情況下,您實際上是在新增核 類型。

由於無法在實際清除期間完成同步處理,因此建議您在整夜排程/完成所有工作。 然後在下一個排定的同步處理之前,于下一個上午透過記錄檢查其完成情況。如果發生問題,一旦找出並解決基礎問題,便可將維護重新排程到下一個晚上。

視環境而定,這些工作可能會執行得更快或更慢,而排程的時間應該會反映這一點。 希望它們會更快,因為我的實驗室環境通常比一般生產環境慢一些。 我在拒絕腳本的時間上有點積極。 如果第 2 層與第 3 層重迭數分鐘,則不會造成問題,因為我的同步未排程執行。

[未同步處理] 會防止拒絕不小心從第 2 層流入我的 Tier3 複本 WSUS 伺服器。 我在 Tier3 拒絕和第 3 層清除之間有額外的時間,因為我一定要先確定拒絕腳本完成,再執行清除。

這會產生一個常見問題:由於我並未同步處理,為何不應該同時執行所有清除和重新編制索引?

答案是,您或許可以這麼做,但我不會這麼做。 如果我在全球的同事需要執行同步處理,使用此排程,我會將 WSUS 中孤立更新的風險降到最低。 我可以將它排程為在下一個晚上重新執行以完成。

Time 工作
上午 12:00 Tier1-Decline
12:15 AM Tier2-Decline
上午 12:30 Tier3-Decline
01:00:00 第 3 層 WSUS 清除
上午 2:00 第 3 層重新編制索引 第 2 層 WSUS 清除
上午 3:00 Tier1-Cleanup 第 2 層重新編制索引
上午 4:00 第 1 層重新編制索引

注意

如果您使用Configuration Manager最新分支 1906 版或更新版本來執行 WSUS 維護,Configuration Manager會在使用由上而下的方法進行同步處理之後執行清除。 在此案例中,您可以將 WSUS 資料庫備份和重新編制工作排程排程在設定的同步排程之前執行,而不必擔心任何其他步驟,因為Configuration Manager會處理所有其他步驟。

如需斷續命名空間的詳細資訊,請參閱下列文章: