この記事の内容
皆様、こんにちは。Configuration Manager / WSUS サポート チームです。
本記事では、Windows Server Update Services (WSUS) サーバーが Microsoft Update (MU) と同期する処理について、手動またはスケジュールによる開始から、更新プログラムのメタデータを WSUS データベース (SUSDB) へ取り込んで完了するまでの流れと、ログによる追跡方法をご案内します。
上流の WSUS サーバーからの同期 (レプリカ モードや自律モードの下流サーバー)、Configuration Manager のソフトウェアの更新ポイントによる同期 (WSUS 同期マネージャー)、更新プログラムの承認、更新ファイル本体のダウンロード、Microsoft Update カタログからのインポート、およびクライアントのスキャンは対象外です。
掲載するログは、実際の WSUS サーバーで同期を実行して動作を確認した際のものです。抜粋は関連する行のみとし、各行の先頭の日時は省略しています。そのほかの省略箇所は (中略) と表記しています。WSUS サーバーの ID はプレースホルダーに置き換えています。
全体の流れ
WSUS の同期は、WSUS サーバーから同期元へ接続して開始します。[製品と分類] と言語の設定に該当する更新プログラムの情報 (メタデータ) を取得し、SUSDB へ取り込みます。
1 回の同期処理は、次の順序で進みます。
- 同期の要求を受け付ける
- [WSUS サービス] が同期処理を開始する
- 同期元 (Microsoft Update) へ接続する
- カテゴリ (製品や分類など) の情報を同期する
- 更新プログラムのメタデータを同期し、SUSDB へ取り込む
- 同期の結果を記録し、同期処理を終了する
同期の後に続く、承認済みの更新プログラムのファイル本体のダウンロードについては、WSUS の仕組み ダウンロード編 をご参照ください。
同期の開始方法
開始方法によらず、ステップ 2 以降の処理は同じです。違いはステップ 1 とステップ 2 のログに表れます。
| 開始方法 | 操作 | 開始を示すログ ([SoftwareDistribution.log]) |
|---|---|---|
| 手動同期 | [WSUS 管理コンソール] で上位のサーバー ノードを選択し、[概要] の [同期の状態] で [今すぐ同期] を選択します。 | [Synchronization manually started] と [EventId=382] |
| スケジュール同期 | [オプション] - [同期スケジュール] で [自動的に同期する] を選択し、[最初の同期] の時刻と [1 日あたりの同期回数] を指定します。 | [EventId=381] |
Microsoft Update への接続を分散するため、スケジュールの時刻にはランダムな時間が加算されます。
手動同期は、管理者として実行した Windows PowerShell からも開始できます。
1 | (Get-WsusServer).GetSubscription().StartSynchronization() |
初回の同期と 2 回目以降の同期
初回の同期では、指定した範囲のすべての更新プログラムを取得します。2 回目以降は、新しい更新プログラムと、既存の更新プログラムの改訂 (リビジョン) や期限切れの情報のみを取得します。
この差分の取得には、アンカー (Anchor) を使用します。同期元は同期のたびにアンカーを生成して WSUS サーバーへ返し、WSUS サーバーは次回の同期でこのアンカーを [SyncAnchor] として同期元へ送ります。同期元は、アンカー以降に変更されたリビジョンだけを返します。アンカーは、カテゴリの同期と更新プログラムの同期で別々に使用されます。詳しくはステップ 4 とステップ 5 でご案内します。
動作確認した WSUS サーバーについて
動作を確認した WSUS サーバーの構成は、次のとおりです。
| 項目 | 値 |
|---|---|
| WSUS サーバーの OS | Windows Server 2025 (ビルド 26100) |
| 同期元 | Microsoft Update |
| プロキシ サーバー | 使用しない |
| 製品 (8 件) | Microsoft Azure Information Protection Unified Labeling Client、Microsoft Defender Antivirus、Microsoft Edge、Windows 10, version 1903 and later、Windows 10、Windows 11、Windows Server 2016、Windows Server 2019 |
| 分類 (5 件) | Upgrades、セキュリティ問題の修正プログラム、更新、重要な更新、定義更新プログラム |
| 言語 | 英語 (en)、日本語 (ja) |
| 同期スケジュール | 自動的に同期する (1 日 2 回) |
| [新しいリビジョンにより期限切れとなった更新プログラムを自動的に拒否する] | 有効 (既定値) |
| 動作確認した同期 | 手動同期 |
| 前回の同期 | スケジュール同期 |
各ステップとログの追跡方法
関連ログ
| ログ名 | 保存場所 | 主な用途 |
|---|---|---|
| [SoftwareDistribution.log] | WSUS サーバーの %ProgramFiles%\Update Services\LogFiles | 同期元から SUSDB へ同期される更新プログラムの詳細を記録します。同期の開始、同期元への接続、メタデータの取り込み、および結果を確認します。 |
| [Change.log] | WSUS サーバーの %ProgramFiles%\Update Services\LogFiles | データベースで変更された情報を記録します。手動同期の開始、同期中の拒否、および同期後のダウンロードの再開を確認します。 |
古い期間の同期は、同じフォルダーの [SoftwareDistribution.log.old] と [Change.log.old] もあわせて確認します。
[SoftwareDistribution.log] の各行は、タブ区切りで次の項目を記録しています。
| 項目 | 例 | 説明 |
|---|---|---|
| 日時 | YYYY-MM-DD hh:mm:ss.fff UTC | 記録された日時 (UTC) です。本記事の抜粋では省略しています。 |
| 種類 | Info、Change、Warning、Error | 行の種類です。Change の行は [Change.log] にも記録されます。 |
| プロセスとスレッド | w3wp.48、WsusService.27 | 記録したプロセスとスレッドです。w3wp は IIS のワーカー プロセス、WsusService は [WSUS サービス] です。 |
| 処理名 | CatalogSyncAgentCore.ExecuteSyncProtocol | 記録した処理の名前です。 |
| メッセージ | Need 11770 updates, 10759 are new | 処理の内容です。 |
追跡する同期の情報
本記事で追跡する同期は、次のとおりです。スレッド以外の値は、ステップ 6 で紹介する Windows PowerShell の出力で確認したものです。
| 項目 | 値 |
|---|---|
| 同期の ID | 8f0cc900-d560-41f1-a861-a363eacad0cc |
| 開始方法 | 手動 (StartedManually : True) |
| 結果 | Succeeded |
| 同期処理を実行したスレッド | WsusService.27 (ステップ 2 からステップ 6 の結果の記録まで) |
同期の ID は [SoftwareDistribution.log] に記録されないため、ステップ 6 で紹介する [StartTime] と [EndTime] (UTC) をログの日時と照合して対応付けます。
ステップ 1 : 同期の要求の受付
手動同期の要求は、IIS のワーカー プロセス (w3wp) が受け付けます。このとき、[SoftwareDistribution.log] に種類が Change の [Synchronization manually started] が記録されます。
1 | Change w3wp.48 AdminDataAccess.StartSubscriptionManually Synchronization manually started |
同じ内容は [Change.log] にも記録されます。[Change.log] は記録量が少ないため、手動同期の開始時刻を探すのに便利です。
1 | Synchronization manually started |
スケジュール同期ではこの行はどちらのログにも記録されないため、開始はステップ 2 の [EventId=381] で確認します。
手動同期を開始しても [Synchronization manually started] が記録されない場合は、要求が WSUS サーバーに届いていません。WSUS サーバーで管理者として Windows PowerShell を実行し、WSUS サーバーへ接続できるかと、要求を受け付ける IIS のアプリケーション プール [WsusPool] が開始されているかを確認します。
1 | Get-WsusServer |
[Get-WsusServer] がエラーにならず、[Get-WebAppPoolState] の [Value] が [Started] であれば正常です。[WsusPool] が停止している場合は、WSUS コンソールが全く開かなくなってしまった! WsusPool の停止とは をご参照ください。
手動同期が 0% から進まない場合は、[WSUS サービス] (サービス名 : WsusService) が実行中であるかを確認します。[サービス] 管理ツールで [状態] が [実行中] であるか、または次のコマンドの [Status] が [Running] であるかを確認します。
1 | Get-Service -Name WsusService |
停止している場合は、[WSUS サービス] を開始してから手動同期を再度実行します。[WSUS サービス] が実行中でも 0% から進まない場合は、次の手順で [WSUS 管理コンソール] のキャッシュをリセットします。
- [WSUS 管理コンソール] を閉じます。
- [WSUS サービス] を停止します。
- %appdata%\Microsoft\mmc フォルダーの wsus を wsus_bak に名前変更します。
- [WSUS サービス] を開始します。
- [WSUS 管理コンソール] を開き、手動同期を再度実行します。
ステップ 2 : 同期処理の開始
要求を受け付けると [WSUS サービス] で同期処理 (CatalogSyncAgent) が開始され、手動同期では [EventId=382] の [A manual synchronization was started.] が記録されます。以降の同期処理の行は、ステップ 6 の [EventId=384] まで、この行と同じスレッド (本記事では WsusService.27) で記録されます。
1 | Info WsusService.8 SusEventDispatcher.TriggerEvent TriggerEvent called for NotificationEventName: CatalogSyncAgent, EventInfo: |
スケジュール同期では w3wp による受付の行がなく、[EventId=381] の [A scheduled synchronization was started.] が記録されます。次は、前回のスケジュール同期の開始部分です。
1 | Info WsusService.8 SusEventDispatcher.TriggerEvent TriggerEvent called for NotificationEventName: CatalogSyncAgent, EventInfo: |
スケジュール同期のみ開始されない場合は、手動同期が成功するかを確認したうえで、[同期スケジュール] の設定を確認します。
ステップ 3 : 同期元への接続
同期処理は、まず構成された同期元を確認します。同期元が Microsoft Update の場合は [Found config says USS is MU site] が記録されます。USS は上流サーバー (Upstream Server) の略です。続いて同期用のホスト (sws.update.microsoft.com) へ接続し、SSL 証明書を検証します。
1 | Info WsusService.27 AuthorizationManager.GetUpstreamServerUriHeader Found config says USS is MU site |
[SSL validation succeeded.] の後にステップ 4 のカテゴリの同期が記録されていれば、接続は成功しています。
接続に失敗する場合は、[SoftwareDistribution.log] の Error の行を確認します。WSUS は WinHTTP を使用して同期元へ接続します。WSUS サーバーとインターネットの間にプロキシ サーバーやファイアウォールがある場合は、[オプション] - [更新元及びプロキシサーバー] の設定と、同期に必要な URL へのアクセスが許可されているかを確認します。必要な URL は、Step 2: Configure WSUS と WSUS の同期先の URL の追加について をご参照ください。
ステップ 4 : カテゴリの同期
更新プログラムを取得する前に、製品、分類、および detectoid (検出用の定義) の情報を同期します。新しい製品や分類も、ここで取得します。
1 | Info WsusService.27 CatalogSyncAgentCore.SyncConfigUpdatesFromUSS Category Sync: Filter: <filter SyncAnchor="2026-09-17 06:24:02.608" GetConfig="1"></filter> |
各メッセージの内容は、次のとおりです。
| メッセージ | 内容 |
|---|---|
| Category Sync: Filter | カテゴリの同期の条件です。[GetConfig=”1”] は製品、分類、および detectoid の情報の要求、[SyncAnchor] は前回の同期のアンカーです。 |
| Need 260 config updates, 4 are new | 前回のアンカー以降に変更された製品、分類、および detectoid の情報 260 件のうち、4 件が SUSDB にないものです。 |
| Imported 4/4 updates in 1 iterations; 0 will be retried | 4 件をすべて取り込み、再試行が必要なものはありません。 |
| 0 updates to go | 取り込みの残りはありません。 |
| Category Sync: New Config Anchor | 次回の同期で使用されるアンカーです。 |
前回のスケジュール同期では、今回の [SyncAnchor] と同じ値が [New Config Anchor] として記録されています。
1 | Info WsusService.26 CatalogSyncAgentCore.SyncConfigUpdatesFromUSS Category Sync: New Config Anchor: 2026-09-17 06:24:02.608 |
ステップ 5 : 更新プログラムのメタデータの同期と SUSDB への取り込み
続いて、更新プログラムのメタデータを同期します。[Catalog Sync: Filter] には、更新プログラムの同期のアンカーと、[製品と分類] および言語の設定が含まれています。次の抜粋の 1 行目は 1,241 文字あるため、途中を省略しています。
1 | Info WsusService.27 CatalogSyncAgentCore.ExecuteSyncProtocol Catalog Sync: Filter: <filter SyncAnchor="2026-09-17 04:02:34.000"><CategoryList><category delta="1" value="db2680cc-4207-46d2-8d6e-6d5b57e6110b" /> (中略) </UCList><languageList><language delta="1" value="1033" /><language delta="1" value="1041" /></languageList></filter> |
抜粋では省略していますが、[CategoryList] の製品 8 件、[UCList] の分類 5 件、[languageList] の言語 2 件 (1033 は英語、1041 は日本語) は、WSUS サーバーの設定と件数が一致しています。[SyncAnchor] には、前回のスケジュール同期で記録された [New Anchor] と同じ値が使われています。
1 | Info WsusService.26 CatalogSyncAgentCore.ExecuteSyncProtocol Catalog Sync: New Anchor: 2026-09-17 04:02:34.000 |
[Need 11770 updates, 10759 are new] は、前回のアンカー以降に変更された 11,770 件のリビジョンのうち、SUSDB にない 10,759 件を取り込むことを示します。取り込みは複数回に分けて行われ、そのたびに [Imported] と、残りの件数を示す [updates to go] が記録されます。
1 | Info WsusService.27 CatalogSyncAgentCore.ImportMultipleUpdates Imported 99/100 updates in 2 iterations; 1 will be retried |
[0 updates to go] の後に [Total actually inserted updates] が記録されれば、メタデータの取り込みは完了です。各 [Imported] の件数の合計 (10,759 件) は、[10759 are new] および [Total actually inserted updates: 10759] と一致しています。
[オプション] - [自動承認] の [詳細] タブで [新しいリビジョンにより期限切れとなった更新プログラムを自動的に拒否する] が有効な場合 (既定で有効)、該当する更新プログラムは取り込み中に拒否され、種類 Change として記録されます。
1 | Change WsusService.27 DBConnection.OnReceivingInfoMessage Successfully deployed deployment(Decline) of Full Deltas 1.459.248.0 (patch from 1.459.215.0) for Defender x86fre [Ring0, Ring1, Ring2, Ring3, Ring4, Broad, Delayed] UpdateID:85ED65E3-C505-4D68-8A55-DE5944C153CF Revision Number:201 |
本記事の WSUS サーバーではこの設定が有効で、取り込み中に 9,760 件の拒否が [Change.log] に記録されました。その多くは Microsoft Defender Antivirus の定義更新プログラムです。期限切れの更新プログラムについては、期限が切れた更新プログラムについて をご参照ください。
取り込みに時間がかかる場合やタイムアウトする場合は、[updates to go] の件数が減っているかを確認します。WSUS 同期時間の増加やタイムアウトの問題について もご参照ください。
ステップ 6 : 同期の結果の記録と同期処理の終了
取り込みが完了すると、ダウンロードの再開が要求され、同期の結果が記録されます。成功した場合は [EventId=384] の [Synchronization completed successfully.] が記録され、同期処理 (CatalogSyncAgent) が終了します。
1 | Change WsusService.27 AdminDataAccess.ExecuteSPResumeAllDownloads Downloading retried |
各メッセージの内容は、次のとおりです。
| メッセージ | 内容 |
|---|---|
| Downloading retried | ファイル本体のダウンロードの再開 (処理名は ExecuteSPResumeAllDownloads) が要求されました。ダウンロードは本記事の対象外です。 |
| CatalogSyncThreadProcess: report subscription succeeded | 同期の結果が成功として記録されました。 |
| EventId=384 … Synchronization completed successfully. | 同期が成功しました。 |
| Agent signalled done. / Firing event SyncFinish… | 同期処理が終了しました。 |
| Marking as Not Running | 同期処理 (CatalogSyncAgent) が実行中ではなくなりました。 |
[Downloading retried] は [Change.log] にも記録されるため、[Change.log] でも同期の終了時刻を確認できます。
1 | Downloading retried |
同期の結果は、[WSUS 管理コンソール] の [同期] ノードか、管理者として実行した Windows PowerShell で確認できます。
1 | $sub = (Get-WsusServer).GetSubscription() |
出力は次のとおりです。[StartTime] と [EndTime] の行は省略しています。[StartedManually] が True の場合は手動同期、False の場合はスケジュール同期です。
1 | Id : 8f0cc900-d560-41f1-a861-a363eacad0cc |
[StartTime] はステップ 2 で同期処理が開始された日時、[EndTime] はステップ 6 で結果が記録された日時 (いずれも UTC) です。同期が失敗した場合は、[Result]、[Error]、[ErrorText] を確認し、同じ時刻の [SoftwareDistribution.log] の Error の行を確認します。
同期処理の終了後には、ロールアップ処理 (RollupAgent) による Microsoft Update への接続が記録されますが、同期処理 (CatalogSyncAgent) とは別の処理のため本記事では扱いません。
ログ確認のポイント
同期処理のスレッドで絞り込む
[SoftwareDistribution.log] には、w3wp による [WSUS 管理コンソール] やクライアントからの要求の処理も記録されます。[EventId=382] または [EventId=381] の行のスレッド (本記事では WsusService.27) で絞り込むと、同期処理を追いやすくなります。ただし、[Agent signalled done.] 以降の行は別のスレッド (本記事では WsusService.3) で記録されます。
取り込み中の Warning の行
ステップ 5 の取り込み中に、次のような SqlException の Warning の行が記録されることがあります (本記事の同期では 5,427 件)。
1 | Warning WsusService.27 DBConnection.ExecuteCommandNoResult SqlException occurred. Number 515 and message Cannot insert the value NULL into column 'RevisionID', table '@AtLeastOneBundle'; column does not allow nulls. INSERT fails. |
これらの行は、バンドルに含まれる更新プログラムのリビジョンがまだデータベースにないことを示しています。直後の [Imported] の行に再試行の件数 ([1 will be retried]) が記録され、最後の [Imported] の行では 0 になっています。同期の成否は、Warning の行の有無ではなく、ステップ 6 の [EventId=384] と [GetLastSynchronizationInfo()] の [Result] で判断します。
同期が失敗した場合の確認箇所
事象ごとに、次の箇所を確認します。
| 事象 | 確認箇所 |
|---|---|
| 手動同期が開始されない、0% から進まない | ステップ 1 の [Synchronization manually started] と、ステップ 2 の [EventId=382] の有無を確認します。あわせて、ステップ 1 の手順で [WsusPool] と [WSUS サービス] の状態を確認します。 |
| スケジュール同期が開始されない | ステップ 2 の [EventId=381] が予定の時刻に記録されているかと、[同期スケジュール] の設定を確認します。 |
| 同期元へ接続できない | ステップ 3 の [SSL validation succeeded.] の前後の Error の行と、プロキシ サーバーや同期に必要な URL へのアクセスを確認します。 |
| 同期に時間がかかる、タイムアウトする | ステップ 5 の [updates to go] の件数が減っているかを確認します。 |
| 同期の結果が成功にならない | [GetLastSynchronizationInfo()] の [Result]、[Error]、[ErrorText] と、同じ時刻の [SoftwareDistribution.log] の Error の行を確認します。 |
同期の失敗の個別の事例は、Troubleshoot WSUS synchronization and import issues と WSUS 上に配信が必要な更新プログラムが同期されてこない!と思ったら をご参照ください。
参考リンク
- Setting up Update Synchronizations
- Step 2: Configure WSUS
- Updates Operations
- MS-WSUSSS: Glossary
- MS-WSUSSS: GetRevisionIdList
- Configuration Manager のソフトウェア更新プログラム管理のトラブルシューティング (WSUS to Microsoft Update synchronization)
- Troubleshoot WSUS synchronization and import issues
- Configuration Manager のログ ファイル リファレンス
- WSUS の仕組み ダウンロード編
- 期限が切れた更新プログラムについて
- WSUS の同期先の URL の追加について
- WSUS コンソールが全く開かなくなってしまった! WsusPool の停止とは
- WSUS 上に配信が必要な更新プログラムが同期されてこない!と思ったら
- WSUS 同期時間の増加やタイムアウトの問題について