System Center Configuration Manager クライアントが更新プログラムのスキャンに失敗する現象について

こんにちは。System Center サポート担当の蔦です。

System Center Configuration Manager (以下、Configuration Manager) で、Windows 7 32bit 端末のConfiguration Manager クライアントがスキャンを行った際に、サーバー側に誤ったスキャン結果が返されるという事象について、お問い合わせをいただくことがあります。
本事象が発生すると、Configuration Manager コンソールのレポートから事象発生端末のスキャン結果が正しく把握できないという問題が発生します。

現在、この現象は System Center 2012 Configuration Manager・System Center Configuration Manager 2007 両方で発生が確認されております。

また、クライアント側に修正パッチを適用しない場合、将来のバージョンでも発生する可能性がございます。

今回は、本事象が発生した場合の対処方法についてご案内いたします。

概要

クライアントの %windir%\WindowsUpdate.log に、以下のようなメッセージが記録されている場合、この問題に該当する可能性がございます。

WARNING: ISusInternal::GetUpdateMetadata2 failed, hr=8007000E

この問題はメモリ割り当ての問題であるため、アドレス空間が事実上無制限である Windows 7 64bit 端末での発生は確認されておりません。ただし、メモリと CPU の使用率が高くなり、パフォーマンスに影響を及ぼす可能性がございますのでご注意ください。
※ 32 bit 端末においても、高いメモリ使用量 (約 1.2 ~ 1.4 GB) となる状態が顕在化します。

また、Windows 8 32 bit 端末においても、少数ではありますが、本事象の発生によって System Center Endpoint Protection の定義ファイルの更新に影響を与えたとの報告がございます。
この問題に対する修正プログラムは、2015 年の第 2 四半期中にリリースされる予定です。ご不便をおかけして誠に申し訳ございませんが、修正プログラムがリリースされるまでの間は、後述する回避策の実施をご検討ください。

原因

本事象は Configuration Manager クライアントがスキャン結果を報告する際に、WSUS 上で「拒否済み」以外の更新プログラムをスキャン対象とすることに起因しております。

大量の更新プログラムがある場合、Configuration Manager に報告されるデータが大きくなり、RPCがデータを報告するのに用いる共有セクションを割り当てることができなくなります。これは、Windows Update Agent をホストしている、svchost プロセスの全体的なメモリ使用量が極めて高くなることによって、利用可能なメモリが不足する、または必要な大きさの連続したメモリ ブロックが存在しなくなるために発生いたします。

Windows 7 32 bit 端末のみでこの問題が発生するのは、Windows 7 64 bit 端末と比べて、仮想アドレス空間として用意されるアドレスの範囲が非常に小さいためです。

回避策

以下の回避策は、環境によっては問題の解決に至らない場合もございますので、予めご留意ください。また、開発環境などで回避策のテストをおこなったうえで、本番環境へ展開していただくことを推奨いたします。なお、リリース予定の修正プログラムを適用した後は、必要に応じて回避策を実施前に戻すこともご考慮のうえ、回避策の実施をご検討ください。

1. 独自の svchost インスタンスに wuauserv (Windows Update Agent Service) を移動させます。

a. クライアントでコマンド プロンプトを開き "sc config wuauserv type= own" と入力して実行してください。
b. サービスから wuauserv を再起動してください。

2. WSUS 上の、不要な更新プログラムの承認ステータスを「拒否済み」に変更します。承認ステータスが「拒否済み」の更新プログラムは、スキャン対象に含まれなくなるため、問題を解決できる可能性が高くなります。

「拒否済み」に変更していただく不要な更新プログラムは以下のものです。

・置き換えられた更新プログラム
・クライアント環境に存在しない、製品や分類の更新プログラム
・期限切れの更新プログラム

承認ステータスを「拒否済み」に変更する方法は、スクリプトを用いて実施いただく方法と、WSUS コンソールから実施いただく方法がございます。手順は後述いたしますので、お客様の環境や運用に合わせて、適切な方法をご検討ください。

不要な更新プログラムを「拒否済み」に変更した後は、WSUS データベース (SUSDB) に対してインデックスの再構成を行い、「WSUS サーバー クリーンアップ ウィザード」を実行して不要な更新プログラムを削除します。
※ インデックスの再構成や「WSUS サーバー クリーンアップ ウィザード」の実行については、こちらをご確認ください。この操作によって Configuration Manager の「ソフトウェア更新プログラム グループ」から不要な更新プログラムが削除されます。

3. ユーザー モード領域の仮想アドレス空間 (VA) を 3072 MB に設定します。クライアントでコマンド プロンプトを開き "bcdedit /set IncreaseUserVA 3072" を入力して実行した後、クライアントを再起動してください。これにより、ユーザー モード領域の仮想アドレス空間 (VA) が 2 GB から 3 GB へ拡張されます。

注意 : 上記の設定は、計 4 GB ある仮想アドレス空間 (VA) を、ユーザー モード領域に 3 GB / カーネル モード領域に 1 GB を割り当てるものです。2 GB あったカーネル モード領域が 1 GB となりますため、OS の動作が不安定になる場合がございますのでご注意ください。

【スクリプトで「拒否済み」に変更する方法】
以下のリンクで、置き換えられら更新プログラムの承認ステータスを「拒否済み」に変更するスクリプトをご提供しております。ダウンロードいただいたファイルの名前を Decline-SupersededUpdates.ps1 に変更してお使いください。

Download

WSUS がレプリカモードで構成されている場合、上位側 (マスター サーバー) でスクリプトを実行していただいた後、下位 (レプリカ サーバー) に同期させる必要がございます。
WSUS が自律モードで構成されている場合、それぞれの WSUS サーバーでこのスクリプトを実行する必要がございます。(プライマリ サイトのソフトウェアの更新ポイントとして構成した WSUS は自律モード、セカンダリ サイトの場合はレプリカ モードとなります。)

WSUS 上に大量の更新プログラムが存在している場合、実行に失敗したりタイムアウトする可能性がございます。
その場合はお手数ではございますが、後述の【WSUS 管理コンソールから「拒否済み」に変更する方法】で更新プログラムを手動で「拒否」にご変更ください。

重要 : 以下の手順を実施する前に、WSUS データベース (SUSDB) を必ずバックアップしてください。

注意 : 既定のWSUSサーバーのポートは80番ですが、カスタム IIS サイトに WSUS をインストールしている場合、ポートが異なる可能性がございます。
使用しているポートをご確認いただき、実行例の -Port パラメーターを変更したうえで実行ください。

スクリプトに –DeclineLastLevelOnly をつけて実行すると、どの更新プログラムも置き換えていない更新プログラムだけを「拒否済み」にします。
省略した場合、置き換えられていない更新プログラムだけを残して、すべての置き換えられた更新プログラムを「拒否済み」にします。

[実行例]
(WSUS サーバーが SSL 環境ではなく、ポート番号に 80 を使用している場合)
どの更新プログラムも置き換えていない更新プログラムのみ「拒否済み」に変更するコマンドは以下の通りです。

1. スクリプトに –SkipDecline をつけて実行し、すべての置き換えられた更新プログラムの数を確認します。
Decline-SupersededUpdates.ps1 -UpdateServer SERVERNAME -Port 80 -SkipDecline

2. スクリプトに –DeclineLastLevelOnly をつけて実行し、置き換えられた更新プログラムだけを「拒否済み」に変更します。
Decline-SupersededUpdates.ps1 -UpdateServer SERVERNAME -Port 80 -DeclineLastLevelOnly

(WSUS サーバーが SSL 環境であり、ポート番号に 8080 を使用している場合)
すべての置き換えられた更新プログラムを「拒否済み」に変更するコマンドは以下の通りです。

Decline-SupersededUpdates.ps1 -UpdateServer SERVERNAME -UseSSL -Port 8080

【WSUS 管理コンソールから「拒否済み」に変更する方法】
WSUS 管理コンソールから手動で作業を実施していただく場合、更新プログラムの置き換えの状態を表すアイコンを表示することで、簡単に置き換えられた更新プログラムだけを選択し、承認ステータスを「拒否済み」に変更することができます。

重要 : 以下の手順を実施する前に、WSUS データベース (SUSDB) を必ずバックアップしてください。

1. WSUS 管理コンソールを開きます。
2. すべての更新プログラムを表示し、以下の条件を設定して最新の情報に更新します。

承認(P) : 拒否された更新以外のすべて
状態(S) : 任意 (WSUS 3.0 の場合は、「すべて」)

3. ヘッダー (ラベル欄) を右クリックして、「優先」をクリックして項目を追加します。

4. 左端の「優先」の項目をクリックしてソートしてください。

5. 置き換えられた更新プログラムを選択し、右クリックからメニューを開き、「拒否」をクリックしてください。

~ 補足 ~
置き換えられた更新プログラムは、以下のどちらかのアイコンで表示されます。

重要 : 必ず以下の 2 つのアイコンのいずれかが表示されている更新プログラムのみを選択してください。アイコンは合計 3 つありますが、「拒否済み」の対象となるのは以下の 2 つのみとなります。
 この更新プログラムが別の更新プログラムを置き換えた後に、さらに別の更新プログラムによって置き換えられていることを表しています。

 この更新プログラムが置き換える更新プログラムはありませんが、別のプログラムによって置き換えられていることを表しています。「置き換えられた更新プログラム」はこのアイコンが表示された更新プログラムに該当します。

上述したとおり、この問題に対する修正プログラムは、2015 年の第 2 四半期中にリリースされる予定です。情報が更新されましたら、この記事でお知らせいたします。

~ 参考情報 ~
Support Tip : ConfigMgr 2012 update scan fails and causes incorrect compliance status
https://blogs.technet.com/b/configurationmgr/archive/2015/04/15/support-tip-configmgr-2012-update-scan-fails-and-causes-incorrect-compliance-status.aspx ※ 本事象の詳細についてご案内しております。恐縮ながら、英語情報となります。

************************************************************

// 2015  12  9日更新

Windows 7 / Windows Server 2008 R2 向けに本事象に対応するための更新プログラムがリリースされております。(Windows Server 2008 / 2012 向けにはリリースされていません。)

以下の KB のうちいずれかが適用されていれば、本問題への対処が行われております。

2015 年 6 月リリース : KB3050265 <https://support.microsoft.com/en-us/kb/3050265>

2015 年 7 月リリース : KB3065987 <https://support.microsoft.com/ja-jp/kb/3065987>

2015 年 8 月リリース : KB3075851 <https://support.microsoft.com/kb/3075851>

2015 年 9 月リリース : KB3083324 <https://support.microsoft.com/kb/3083324>

2015 年 10 月リリース : KB3083710  <https://support.microsoft.com/ja-jp/kb/3083710>

2015 年 11 月リリース : KB3102810 <https://support.microsoft.com/ja-jp/kb/3102810>

2015 年 12 月リリース : KB3112343 <https://support.microsoft.com/ja-jp/kb/3112343>

(2015 年 8 月以降の Windows Update Agent を更新する更新プログラムは「重要な更新」の分類でリリースされました。)

 

これから更新プログラムを配布される場合は、最新のバージョンを適用してください。

■ ダウンロード先

(32 ビット Windows 7 用) "Windows 7 用更新プログラム (KB3112343)"
https://www.microsoft.com/ja-jp/download/details.aspx?id=50031

(64 ビット Windows 7 用) "Windows 7 for x64-Based Systems 用更新プログラム (KB3112343)"
https://www.microsoft.com/ja-jp/download/details.aspx?id=50023

(64 ビット Windows Server 2008 R2 用) "Windows Server 2008 R2 x64 Edition 用更新プログラム (KB3112343)"
https://www.microsoft.com/ja-jp/download/details.aspx?id=50024

 

Configuration Manager のパッケージ配布機能を使用する場合には、以下のコマンド ラインが利用できます。

(Windows 7 32 ビットの例)  wusa.exe Windows6.1-KB3112343-x86.msu /quiet /norestart

 

また本更新プログラムはクライアントの Windows Update Agent をバージョンアップします。このため System Center Configuration Manager 2007 環境をお使いの場合は、ソフトウェア更新ポイント機能で利用している WSUS のバージョンが3.2.7600.256 以上であることを必ず確認してください。

  • 確認方法

WSUS 管理コンソールの該当サーバーのトップ画面を開き、中央ペインの "接続" セクションの "サーバー バージョン" を確認します。

下記のバージョン以上であれば対処不要です。

「サーバー バージョン: 3.2.7600.256」

WSUS クライアントがエラー 0x800B0001 で更新プログラムの検出に失敗する

https://blogs.technet.com/b/jpwsus/archive/2012/07/05/wsus-client-error-0x800b0001.aspx