Microsoft WSUS と Configuration Manager SUP のメンテナンスに関する完全なガイド
この記事では、Configuration Manager環境の WSUS メンテナンスに関するいくつかの一般的な質問について説明します。
元の製品バージョン: Windows Server、Windows Server Update Services、Configuration Manager
元の KB 番号: 4490644
はじめに
多くの場合、質問は、Configuration Manager環境でこのメンテナンスを適切に実行する方法、またはこのメンテナンスを実行する頻度に関する説明に沿って行われます。 良心的なConfiguration Manager管理者が WSUS メンテナンスをまったく実行する必要があることを認識しないことは珍しくありません。 ほとんどのユーザーは、ソフトウェア更新ポイント (SUP) の前提条件であるため、WSUS サーバーを設定するだけです。 SUP が設定されたら、WSUS コンソールを閉じて、存在しないふりをします。 残念ながら、Configuration Manager クライアントと WSUS/SUP サーバーの全体的なパフォーマンスに問題がある可能性があります。
このメンテナンスを行う必要があることを理解することで、どのメンテナンスを行う必要があるか、どのくらいの頻度でメンテナンスを行う必要があるかが気になります。 答えは、毎月のメンテナンスを実行する必要があるということです。 メンテナンスは簡単で、最初から適切に管理されている WSUS サーバーには時間はかからずです。 ただし、WSUS のメンテナンスが行われてからしばらく時間が経過した場合は、クリーンアップがより困難になったり、初回に時間がかかる場合があります。 その後の数か月で、はるかに簡単または高速になります。
簡潔な手順と自動スクリプトの詳細については、「 管理と WSUS データベースの自動メンテナンスを参照してください。
現在のブランチ バージョン 1906 以降Configuration Managerサポートしながら WSUS を管理する
現在のブランチ バージョン 1906 以降Configuration Manager使用している場合は、最上位サイトのソフトウェア更新ポイント構成で WSUS メンテナンス オプションを有効にして、各同期後にクリーンアップ手順を自動化することをお勧めします。 WSUS データベースのバックアップとインデックスの再作成を除き、この記事で説明したすべてのクリーンアップ操作を効果的に処理します。 WSUS データベースのバックアップは、スケジュールに従って WSUS データベースのインデックス再作成と共に自動化する必要があります。
Configuration Managerでのソフトウェア更新プログラムのメンテナンスの詳細については、「ソフトウェア更新プログラムのメンテナンス」を参照してください。
重要な考慮事項
Note
Configuration Manager バージョン 1906 で追加されたメンテナンス機能を利用している場合は、Configuration Managerが各同期後にクリーンアップを処理するため、これらの項目を考慮する必要はありません。
メンテナンス プロセスを開始する前に、この記事のすべての情報と手順をお読みください。
WSUS をダウンストリーム サーバーと共に使用する場合、WSUS サーバーは上から下に追加されますが、下から削除する必要があります。 更新プログラムを同期または追加するときは、最初にアップストリームの WSUS サーバーに移動し、次にダウンストリーム サーバーにレプリケートします。 クリーンアップを実行し、WSUS サーバーからアイテムを削除する場合は、階層の下部から開始する必要があります。
WSUS メンテナンスは、同じレベルの複数のサーバーで同時に実行できます。 これを行う場合は、次のレベルに移行する前に、1 つの層が完了していることを確認します。 以下で説明するクリーンアップとインデックス再作成の手順は、レプリカ WSUS サーバーかどうかに関係なく、すべての WSUS サーバーで実行する必要があります。 WSUS サーバーがレプリカであるかどうかを判断する方法の詳細については、「 置き換えられた更新プログラムを拒否する」を参照してください。
既に実行されている作業の一部が失われる可能性があるため、メンテナンス プロセス中に SUP が同期されないようにします。 SUP 同期スケジュールを確認し、このプロセス中に一時的に手動に設定します。
SUSDB を共有しないプライマリ サイトまたは中央管理 (CAS) の複数の SUP がある場合は、サイトの最初の SUP と同期する WSUS サーバーを、サイトの下の層に存在していると考えてください。 たとえば、CAS サイトには次の 2 つの SUP があります。
- New という名前の 1 つは Microsoft Update と同期します。これは、最上位レベル (Tier1) になります。
- "2012" というサーバーが "新規" と同期すると、第 2 層と見なされます。 プライマリ サイトの 1 つの SUP など、他のすべての Tier2 サーバーを同時にクリーンアップできます。
WSUS メンテナンスを実行する
WSUS の適切なメンテナンスに必要な基本的な手順は次のとおりです。
- WSUS データベースをバックアップする
- ユーザー設定フィールドのインデックスを作成する
- WSUS データベースの再インデックス化に関するページ
- 置き換えられた更新プログラムを拒否し、メンテナンスを実行する
- WSUS サーバー クリーンアップ ウィザード。
WSUS データベースをバックアップする
目的の方法を使用して WSUS データベース (SUSDB) をバックアップします。 詳細については、「データベースの完全バックアップの作成」を参照してください。
ユーザー設定フィールドのインデックスを作成する
このプロセスは省略可能ですが、推奨され、後続のクリーンアップ操作中のパフォーマンスが大幅に向上します。
現在のブランチ バージョン 1906 以降Configuration Manager使用している場合は、Configuration Managerを使用してインデックスを作成することをお勧めします。 インデックスを作成するには、最上位サイトのソフトウェア更新ポイント構成で、 WSUS データベースに非クラスター化インデックスを追加 するオプションを構成します。
古いバージョンの Configuration Manager またはスタンドアロン WSUS サーバーを使用する場合は、次の手順に従って、SUSDB データベースにカスタム インデックスを作成します。 SUSDB ごとに、1 回限りのプロセスです。
SUSDB データベースの バックアップ があることを確認します。
SQL Management Studio を使用して、WSUS データベースのインデックスの再作成に関するセクションで説明されているのと同じ方法で、SUSDB データベースに 接続します。
SUSDB に対して次のスクリプトを実行して、2 つのカスタム インデックスを作成します。
-- 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、行 1
テーブル 'dbo.tbLocalizedPropertyForRevision' に 'nclLocalizedPropertyID' という名前のインデックスまたは統計が既に存在するため、操作は失敗しました。
WSUS データベースの再インデックス化に関するページ
WSUS データベース (SUSDB) のインデックスを再作成するには、WSUS データベース T-SQL スクリプト のインデックス再作成 を使用します。
SUSDB に接続してインデックス再作成を実行する手順は、SUSDB が SQL Server または Windows Internal Database (WID) で実行されているかどうかによって異なります。 SUSDB が実行されている場所を確認するには、サブキーにある WSUS サーバー上のレジストリ エントリの値 SQLServerName
を HKEY_LOCAL_MACHINE\Software\Microsoft\Update Services\Server\Setup
確認します。
値にサーバー名またはサーバー\インスタンスのみが含まれている場合、SUSDB はSQL Serverで実行されます。 値に文字列または##WID
文字列##SSEE
が含まれている場合、次に示すように、SUSDB は WID で実行されます。
WID に SUSDB がインストールされている場合
WID に SUSDB をインストールした場合、インデックス再作成スクリプトを実行するには、SQL Server Management Studio Express をローカルにインストールする必要があります。 インストールする SQL Server Management Studio Express のバージョンを簡単に判断する方法を次に示します。
Windows Server 2012 以降のバージョン
バージョン番号を
C:\Windows\WID\Log
含むエラー ログに移動して見つけます。SQL Server とそのコンポーネントのバージョン、エディション、および更新プログラムのレベルを確認する方法 この値は、WID が実行されている Service Pack (SP) レベルを示します。 Microsoft Download Center for SQL Server Management Studio Express を検索する場合は、SP レベルを含めます。
Windows Server 2008 R2 用の更新プログラム (KB3137923)
- メモ帳で
C:\Windows\SYSMSI\SSEE\MSSQL.2005\MSSQL\LOG
最後のエラー ログに移動して開きます。 上部にバージョン番号 (9.00.4035.00 x64 など) があります。 SQL Server とそのコンポーネントのバージョン、エディション、および更新プログラムのレベルを確認する方法 このバージョン番号は、実行している Service Pack レベルを示します。 Microsoft Download Center for 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 を起動してみてください。
SQL SERVERに SUSDB がインストールされている場合
完全なSQL Serverに SUSDB がインストールされている場合は、SQL Server Management Studioを起動し、メッセージが表示されたらサーバーの名前 (および必要に応じてインスタンス) を入力します。
ヒント
または、呼び出された sqlcmd
ユーティリティを使用してインデックス再作成スクリプトを実行することもできます。 詳しくは、WSUS のドキュメントをご覧ください。
スクリプトの実行
SQL Server Management StudioまたはSQL Server Management Studio Express でスクリプトを実行するには、[新しいクエリ] を選択し、ウィンドウにスクリプトを貼り付けて、[実行] を選択します。 完了すると、 クエリが正常に実行された メッセージがステータス バーに表示されます。 [ 結果 ] ウィンドウには、再構築されたインデックスに関連するメッセージが表示されます。
置き換えられた更新プログラムを拒否し、メンテナンスを実行する
クライアントがより効率的にスキャンできるように、WSUS サーバーで置き換えられた更新プログラムを拒否します。 更新プログラムを拒否する前に、置き換えられた更新プログラムがデプロイされていること、および置き換えられた更新プログラムが不要になっていることを確認します。 Configuration Managerには個別のクリーンアップが含まれています。これにより、指定した条件に基づいて置き換えられた更新プログラムを期限切れにできます。 詳細については、次の記事をご覧ください。
次の SQL クエリを SUSDB データベースに対して実行して、置き換えられた更新プログラムの数をすばやく決定できます。 置き換えられた更新プログラムの数が 1500 より多い場合、サーバー側とクライアント側の両方で、ソフトウェア更新プログラム関連のさまざまな問題が発生する可能性があります。
-- Find the number of superseded updates
Select COUNT(UpdateID) from vwMinimalUpdate where IsSuperseded=1 and Declined=0
現在のブランチ バージョン 1906 以降Configuration Manager使用している場合は、最上位サイトのソフトウェア更新ポイント構成の置き換え規則に従って WSUS で有効期限切れの更新プログラムを拒否するオプションを有効にすることで、置き換えられた更新プログラムを自動的に拒否することをお勧めします。
このオプションを使用すると、同期プロセスが完了した後に WsyncMgr.log ファイルを確認することで、拒否された更新プログラムの数を確認できます。 このオプションを使用する場合は、このセクションで後述するスクリプトを使用する必要はありません (手動で実行するか、スケジュールに従って実行するタスクとして設定します)。
スタンドアロン WSUS サーバーまたは以前のバージョンの Configuration Manager を使用している場合は、WSUS コンソールを使用して 、置き換えられた更新プログラムを手動で拒否 できます。 または、この PowerShell スクリプトを実行することもできます。 次に、スクリプトをコピーし、 Decline-SupersededUpdatesWithExclusionPeriod.ps1 スクリプト ファイルとして保存します。
Note
このスクリプトは、そのまま提供されます。 運用環境で使用する前に、ラボで完全にテストする必要があります。 Microsoft は、このスクリプトの使用に関していかなる保証も行いません。 常に最初にパラメーターを指定してスクリプトを -SkipDecline
実行し、置き換えられた更新プログラムが拒否される回数の概要を取得します。
Configuration Managerが置き換えられた更新プログラムの即時期限切れに設定されている場合 (以下を参照)、PowerShell スクリプトを使用して、置き換えられた更新プログラムをすべて拒否できます。 これは、Configuration Manager/WSUS 階層内のすべての自律 WSUS サーバーで実行する必要があります。
セカンダリ サイトの SUP など、レプリカとして設定されている WSUS サーバーで PowerShell スクリプトを実行する必要はありません。 WSUS サーバーがレプリカであるかどうかを確認するには、 ソースの更新 プログラムの設定を確認します。
更新プログラムがConfiguration Managerですぐに期限切れするように構成されていない場合は、置き換えられた更新プログラムの有効期限が切れる日数のConfiguration Manager設定と一致する除外期間で PowerShell スクリプトを実行する必要があります。 この場合、SUP コンポーネントのプロパティは、置き換えられた更新プログラムが期限切れになるまで 2 か月間待機するように構成されているため、60 日間になります。
次のコマンド ラインは、PowerShell スクリプトを実行するさまざまな方法を示しています。
Note
WSUS サーバーでスクリプトを実行するときは、実際のSERVERNAME
の代わりにLOCALHOST
を使用します。
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
WSUS サーバーで -SkipDecline
更新プログラムに関する情報を -ExclusionPeriod 60
収集し、拒否できる更新プログラムの数を指定してスクリプトを実行します。
-ExclusionPeriod 60 でスクリプトを実行し、60 日より前の置き換えられた更新プログラムを拒否します。
スクリプトの実行中に、出力インジケーターと進行状況インジケーターが表示されます。 SupersededUpdates.csv ファイルに注意してください。このファイルには、スクリプトによって拒否されたすべての更新プログラムの一覧が含まれます。
Note
上記の PowerShell スクリプトを使用して置き換えられた更新プログラムを拒否しようとしたときに問題が発生した場合は、 WSUS サーバーに接続するときに Decline-SupersededUpdatesWithExclusionPeriod.ps1 スクリプトの実行がタイムアウトする、またはトラブルシューティング手順の実行中に 401 エラーが発生 する方法に関するセクションを参照してください。
置き換えられた更新プログラムが拒否された後、最適なパフォーマンスを得るための SUSDB のインデックスを再度作成する必要があります。 関連情報については、「 WSUS データベースのインデックスを再作成する」を参照してください。
WSUS サーバー クリーンアップ ウィザード。
WSUS サーバー クリーンアップ ウィザードには、次の項目をクリーンアップするためのオプションが用意されています。
- 未使用の更新プログラムと更新プログラムのリビジョン (古い更新プログラムとも呼ばれます)
- サーバーに接続していないコンピューター
- 不要な更新ファイル
- 有効期限が切れた更新プログラム
- 置き換えられた更新プログラム
Configuration Manager 環境では、 Computers がサーバーに接続していない と 不要な更新ファイル オプションは関係ありません。これは、Configuration Manager がソフトウェア更新プログラムのコンテンツとデバイスを管理するためです。ただし、 すべての WSUS レポート イベントの作成 または WSUS 状態レポート イベントのみを作成する を除き オプションは Software Update Sync Settings で選択されます。 これらのオプションのいずれかを構成している場合は、WSUS サーバー クリーンアップを自動化して、これら 2 つのオプションのクリーンアップを実行することを検討する必要があります。
現在のブランチ バージョン 1906 以降Configuration Manager使用している場合、置き換え規則に従って WSUS で有効期限切れの更新プログラムを拒否するオプションを有効にすると、Configuration Managerで指定されている置き換え規則に基づいて、期限切れの更新プログラムと置き換えられた更新プログラムの拒否が処理されます。 現在のブランチ バージョン 1906 で [WSUS データベースから古い更新プログラムを削除する] オプションConfiguration Manager有効にすると、未使用の更新プログラムと更新プログラムのリビジョン (古い更新プログラム) のクリーンアップが処理されます。 WSUS データベースのクリーンアップをConfiguration Managerできるように、最上位サイトのソフトウェア更新ポイント構成でこれらのオプションを有効にすることをお勧めします。
WSUS データベースから古い更新プログラムをクリーンアップしたことがない場合は、このタスクがタイムアウトになる可能性があります。詳細については WsyncMgr.log を確認し、HELP で指定されている SQL スクリプトを手動で実行できます。WSUS はメンテナンスを行わずに長年実行されており、クリーンアップ ウィザードは 1 回だけタイムアウトし続けます。これにより、Configuration Managerからの後続の試行が正常に実行されます。 Configuration Managerでの WSUS のクリーンアップとメンテナンスの詳細については、ドキュメントを参照してください。
スタンドアロン WSUS サーバーの場合、または以前のバージョンのConfiguration Managerを使用している場合は、WSUS クリーンアップ ウィザードを定期的に実行することをお勧めします。 WSUS サーバー クリーンアップ ウィザードが実行されておらず、WSUS がしばらく運用されている場合は、クリーンアップがタイムアウトする可能性があります。その場合は、 最初に手順 2 と 手順 3 でインデックスを再作成し、次に 、[未使用の更新プログラムと更新履歴 ] オプションのみをオンにしてクリーンアップを実行します。
WSUS クリーンアップ ウィザードを実行したことがない場合は、 未使用の更新プログラムと更新プログラムのリビジョン でクリーンアップを実行するには、いくつかのパスが必要になる場合があります。 タイムアウトした場合は、完了するまでもう一度実行し、他の各オプションを一度に 1 つずつ実行します。 最後に、すべてのオプションがオンになっているフル パスを作成します。 タイムアウトが引き続き発生する場合は、ヘルプの代替手段SQL Server参照してください。WSUS はメンテナンスを行わずに長年実行されており、クリーンアップ ウィザードはタイムアウトを続けます。サーバー クリーンアップ ウィザードまたは SQL の代替手段が完了するまでに、数時間または数日かかる場合があります。
WSUS サーバー クリーンアップ ウィザードは、WSUS コンソールから実行されます。 次に示すように、[ オプション] の下にあります。
詳細については、「SQL Server エラー ログの表示」を参照してください。
削除したアイテムの数を報告すると、クリーンアップは完了します。 WSUS サーバーでこの情報が返されない場合は、クリーンアップがタイムアウトしたと見なしても問題ありません。その場合は、もう一度起動するか、 SQL の代替手段を使用する必要があります。
置き換えられた更新プログラムが拒否された後、最適なパフォーマンスを得るための SUSDB のインデックスを再度作成する必要があります。 関連情報については、「 WSUS データベースのインデックスの再作成 」セクションを参照してください。
トラブルシューティング
ヘルプ WSUS はメンテナンスが行われずに長年実行されており、クリーンアップ ウィザードはタイムアウトを続けます
ここには 2 つの異なるオプションがあります。
新しいデータベースを使用して WSUS を再インストールします。 これには、初期同期の長さ、SUSDB に対する完全なクライアント スキャン、差分スキャンなど、多くの注意事項があります。
SUSDB データベースの バックアップ があることを確認してから、 インデックスの再作成を実行します。 完了したら、SQL Server Management Studio または SQL Server Management Studio Express で次のスクリプトを実行します。 完了したら、上記のすべての手順に従ってメンテナンスを実行します。 ストアド プロシージャでは未使用の
spDeleteUpdate
更新プログラムと更新履歴のみが削除されるため、この最後の手順が必要です。
Note
スクリプトを実行する前に、「 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 スクリプトを使用して置き換えられた更新プログラムを拒否しようとしたときにエラーが発生した場合は、代替 SQL スクリプトを SUDB に対して実行できます。
CONFIGURATION MANAGERが WSUS と共に使用されている場合は、ソフトウェア更新ポイント コンポーネントのプロパティ>置き換え規則を確認して、置き換えられた更新プログラムの有効期限が切れる頻度 (X か月の直後や後など) を確認します。 この名前を書き留めておきます。
SUSDB データベースをバックアップしていない場合は、先に進む前にバックアップしてください。
SQL Server Management Studioを使用して SUSDB に接続します。
次のクエリを実行します。 含まれる
DECLARE @thresholdDays INT = 90
行の番号 90 は、この手順の手順 1 の置き換え規則と、置き換え規則で構成されている月数と一致する正しい日数に対応する必要があります。 これがすぐに期限切れに設定されている場合は、SQL クエリ@thresholdDays
の値を 0 に設定する必要があります。-- 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.'
進行状況を確認するには、Results ペインの Messages タブを監視します。
拒否した更新プログラムのいずれかが必要である場合はどうなりますか?
Configuration Managerでこれらの拒否された更新プログラムのいずれかが必要と判断した場合は、更新プログラムを右クリックして [承認] を選択することで WSUS に戻すことができます。 承認を [未承認] に変更し、SUP を再同期して更新プログラムを取り戻します。
更新プログラムが WSUS でなくなった場合は、有効期限が切れていないか、カタログから削除されていない場合は、Microsoft Update カタログからインポートできます。
WSUS メンテナンスの自動化
Note
Configuration Manager バージョン 1906 以降を使用している場合は、最上位サイトのソフトウェア更新ポイント構成で WSUS メンテナンス オプションを有効にすることで、クリーンアップ手順を自動化します。 これらのオプションは、WSUS サーバー クリーンアップ ウィザードによって実行されるすべてのクリーンアップ操作を処理します。 ただし、スケジュールに従って WSUS データベースを自動的にバックアップしてインデックスを再作成する必要があります。
WSUS メンテナンス タスクは、いくつかの要件が最初に満たされていることを前提として自動化できます。
WSUS クリーンアップを実行したことがない場合は、最初の 2 つのクリーンアップを手動で実行する必要があります。 2 回目の手動クリーンアップは、一部の更新と更新のリビジョンが期限切れになるまで 30 日かかるため、最初から 30 日間実行する必要があります。2 回目のクリーンアップ後まで自動化しない理由には、具体的な理由があります。 最初のクリーンアップは通常より長く実行される可能性があります。 そのため、このメンテナンスにかかる時間を判断することはできません。 2 番目のクリーンアップは、マシンの正常な状態を示すはるかに優れた指標です。 これは、スケジュールのタイミングを決定できるように、各ステップがベースラインとしてかかった時間 (約 30 分のウィグル ルームを追加する場合も好む) を把握する必要があるため、重要です。
ダウンストリーム WSUS サーバーがある場合は、最初にメンテナンスを実行してから、アップストリーム サーバーを実行する必要があります。
SUSDB のインデックス再作成をスケジュールするには、完全バージョンのSQL Serverが必要です。 Windows Internal Database (WID) には、Express SQL Server Management Studioメンテナンス タスクをスケジュールする機能がありません。 つまり、WID が使用されている場合は、前述のタスク スケジューラを
SQLCMD
使用できます。 このルートに進む場合は、このメンテナンス期間中に WSUS サーバーまたは SUP を同期しないことをお知らせください。 これを行うと、ダウンストリーム サーバーがクリーンアップしようとしたすべての更新プログラムが再同期される可能性があります。AM 同期の前に夜間にスケジュールを設定するので、同期を実行する前に確認する時間があります。
必要/役に立つリンク:
- WSUS データベースのインデックスを再作成する
- エージェント XPs サーバー構成オプション
- Weekend Scripter: Windows タスク スケジューラを使用してWindows PowerShell スクリプトを実行する
WSUS クリーンアップ スクリプト
Note
WSUS サーバーでスクリプトを実行するときは、実際のSERVERNAME
の代わりにLOCALHOST
を使用します。 さらに、 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 クリーンアップ タスクを設定する
Note
前述のように、現在のブランチ バージョン 1906 以降Configuration Manager使用している場合は、最上位サイトのソフトウェア更新ポイント構成で WSUS メンテナンス オプションを有効にすることで、クリーンアップ手順を自動化します。 スタンドアロン WSUS サーバーまたは以前のバージョンのConfiguration Managerの場合は、引き続き次の手順を使用できます。
前のセクションで説明した Weekend Scripter ブログ投稿には、この手順の基本的な手順とトラブルシューティングが含まれています。 ただし、次の手順で手順を説明します。
タスク スケジューラを開き、[タスクの作成] を選択します。 [ 全般 ] タブで、タスクの名前 (PowerShell スクリプトを実行するユーザー) を (ほとんどのユーザーがサービス アカウントを使用する) ように設定します。 [ユーザーがログオンしているかどうかを実行する] を選択し、必要に応じて説明を追加します。
[ アクション] タブで、新しいアクションを追加し、実行するプログラム/スクリプトを指定します。 この場合、PowerShell を使用し、実行する PS1 ファイルをポイントする必要があります。 WSUS クリーンアップ スクリプトを使用できます。 このスクリプトは、現在のブランチ バージョン 1906 では実行されないクリーンアップ オプションConfiguration Manager実行します。 スタンドアロン WSUS または古いバージョンのConfiguration Managerを使用している場合は、コメントを解除できます。 ログが必要な場合は、次のようにスクリプトの最後の行を変更できます。
Note
WSUS サーバーでスクリプトを実行するときは、実際の
SERVERNAME
の代わりにLOCALHOST
を使用します。 さらに、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/警告が表示されます。 この警告は無視できます。
[トリガー] タブ で 、月に 1 回または任意のスケジュールにスケジュールを設定します。 繰り返しになりますが、クリーンアップとインデックスの再作成の期間中に WSUS を同期しないようにする必要があります。
調整するその他の条件や設定も設定します。 タスクを保存すると、 実行 ユーザーの資格情報の入力を求めるメッセージが表示される場合があります。
これらの手順を使用して、 Decline-SupersededUpdatesWithExclusionPeriod.ps1 スクリプトを 3 か月ごとに実行するように構成することもできます。 通常、このスクリプトは他のクリーンアップ手順の前に実行するように設定しますが、手動で実行し、正常に完了したことを確認した後にのみ実行します。 3 か月ごとに第 1 日曜日の午前 12 時に実行します。
SQLCMD とタスク スケジューラを使用して WID の SUSDB インデックス再作成を設定する
WSUS データベース スクリプトのインデックス再作成を .sql ファイルとして保存します (例: SUSDBMaint.sql)。
基本タスクを作成し、名前を付けます。
クリーンアップの実行が完了すると予想されてから約 30 分後に、このタスクを開始するようにスケジュールします。 私のクリーンアップは、毎週第 1 日曜日の午前 1 時に実行されています。 実行には約 30 分かかりますが、インデックス再作成を開始する前にさらに 30 分かかります。 これは、次に示すように、最初の日曜日の 2:00 AM ごとにこのタスクをスケジュールすることを意味します。
プログラムを開始するアクション を選択します。 [ プログラム/スクリプト ] ボックスに、次のコマンドを入力します。 パラメーターの後に指定された
-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 サービスが開始されません。
WID 以外の SUSDB に対する SQL での基本的なスケジュールされたメンテナンス タスクの設定
Note
メンテナンス プランを作成または管理するには、SQL Serverの sysadmin である必要があります。
Microsoft SQL Server Management Studio を起動して、ローカル サーバー インスタンスに接続します。 [管理] を展開し、[メンテナンス プラン] を右クリックして、[新しいメンテナンス プラン] を選択します。 アプリケーションの名前を入力します。
サブプラン 1 を選択し、ツールボックスがコンテキストにあることを確認します。
タスク [T-SQL ステートメントの実行タスク] をドラッグしてドロップします。
もう一度右クリックして [ダウンロード] を選択します。 WSUS のインデックスの再作成スクリプトをコピーして貼り付け、[OK] をクリックします。
クリーンアップの実行が完了すると予想されてから約 30 分後に、このタスクを実行するようにスケジュールします。 私のクリーンアップは、毎週第 1 日曜日の午前 1 時に実行されています。 実行には約 30 分かかりますが、インデックスの再作成を開始する前にさらに 30 分かかります。 つまり、このタスクを毎週第 1 日曜日の午前 2 時に実行するようにスケジュールします。
メンテナンス 計画の作成中に、SUSDB のバックアップをプランに追加することを検討してください。 通常は最初にバックアップしてからインデックスを再作成します。 スケジュールに時間が追加される場合があります。
まとめ
階層で実行する場合は、階層の下部から WSUS クリーンアップの実行を行う必要があります。 ただし、スクリプトを使用して置き換えられた更新プログラムを拒否する場合は、上から下に実行する必要があります。 置き換えられた更新プログラムの拒否は、実際には削除ではなく、更新プログラムへの追加の一種です。 この場合、実際に 承認 の種類を追加しています。
実際のクリーンアップ中は同期を実行できないため、すべてのタスクを夜間にスケジュール/完了することをお勧めします。 次に、次のスケジュールされた同期の前に、次の朝にログ記録を使用して完了を確認します。何かが失敗した場合は、基になる問題が特定されて解決されると、次の夜にメンテナンスを再スケジュールできます。
これらのタスクは、環境によっては実行速度が速くなったり遅くなったりする可能性があり、スケジュールのタイミングにそれが反映されている必要があります。 私のラボ環境は通常の運用環境よりも少し遅くなる傾向があるため、それらが速くなることを願っています。 辞退スクリプトのタイミングに少し積極的です。 Tier2 が Tier3 と数分重複する場合、同期の実行がスケジュールされていないため、問題は発生しません。
同期しない場合、Tier2 から誤って Tier3 レプリカ WSUS サーバーに流れ込むので、減少は続きます。 クリーンアップを実行する前に拒否スクリプトが完了したことを確認したいので、Tier3 の拒否と Tier3 のクリーンアップの間に余分な時間を与えました。
一般的な質問が表示されます。同期していないので、すべてのクリーンアップとインデックスの再作成を同時に実行しないのはなぜですか?
答えは、おそらくできることですが、そうはならないでしょう。 世界中の同僚が同期を実行する必要がある場合は、このスケジュールで WSUS で孤立した更新プログラムのリスクを最小限に抑えます。 また、次の夜に再実行して完了するようにスケジュールすることもできます。
時刻 | レベル | タスク |
---|---|---|
午前 12 時 00 分 | Tier1-Decline | |
0:15 | Tier2-Decline | |
0:30 | Tier3-Decline | |
1:00 | Tier3 WSUS クリーンアップ | |
午前 2 時 | Tier3 Reindex | Tier2 WSUS のクリーンアップ |
3:00 AM | Tier1-Cleanup | Tier2 のインデックス再作成 |
4:00 AM | Tier1 のインデックス再作成 |
Note
WSUS メンテナンスを実行するために現在のブランチ バージョン 1906 以降のバージョンConfiguration Manager使用している場合は、トップダウン アプローチを使用して同期後にクリーンアップを実行Configuration Manager。 このシナリオでは、WSUS データベースのバックアップジョブとインデックス再作成ジョブを、構成済みの同期スケジュールの前に実行するようにスケジュールすることができます。他の手順は、Configuration Managerは他のすべての処理を行うためです。
不整合な名前空間の詳細については、次の記事を参照してください。