[SCCM] ソフトウェア更新プログラムの適用状況を収集・レポートする

こんにちは、System Center サポート部の石井です。

SCCM 2007 や SCCM 2012 にて、ソフトウェア更新プログラムの適用状況を判断する場合の一般的な方法について、ご紹介します。
SCCM 管理下のマシンの更新プログラムの適用状況を判断するにあたって、大きくわけて以下の 2 通りがあります。

===========================================
A. ソフトウェアの更新ポイントの機能を使う
===========================================

SCCM の "ソフトウェアの更新" 機能を構築済みの場合、ソフトウェアの更新関連のレポートを活用することが、最も細かく更新の適用状況が判断出来る方法です。
SCCM の "ソフトウェアの更新" では、クライアントは SCCM の "ソフトウェアの更新ポイント" に存在する WSUS サーバーに対して、Windows Update や WSUS と全く同じ仕組みで更新プログラムのスキャンを行います。

スキャンというのは、更新プログラムごとに定義された、レジストリやファイル バージョンをスキャンし、以下の 3 パターンに分けて状態を検出する仕組みです。

  - 要件を満たすものは "適用不要" (例: ファイル バージョンがより新しい)
 - 要件を満たさないものは "適用が必要 (必須)" (例: ファイル バージョンが満たない)
  - 既にインストールされているものは "インストール済み" (例: 当該の更新がインストールされたことを示すレジストリが存在)

上記の結果は、クライアント マシンごとに、全更新プログラムに対して保持しています。

※ 勘違いしやすい点なのですが、更新を実際に配布しているかどうかは無関係です。上記のようなスキャンは、更新の配布を行っていなくても、全クライアントが全更新に対して行いますので、レポートやクエリでの情報収集が可能です。

 

さて、ここで活用したいレポートは、以下の 2 つです。

- マシン単位で一覧する

SCCM 2007 の場合、"対応 6 - 特定のコンピュータ" というレポートで、マシン名を入れれば、当該のマシンにて必要な更新プログラム・不要な更新プログラムというのが全てリストアップされます。
SCCM 2012 の場合、"コンプライアンス 5 - 特定のコンピューター" というレポートが同等のレポートとなります。

レポートにおいては、以下のような検出状況が更新プログラムごとに表示されます。
これは、WSUS や Windows Update と全く同じ仕組みにより、更新プログラムごとの検出条件に従って付き合わせた結果です。

本レポートでは、以下のような形で、更新ごとに情報がリストアップされます。

- 承認済み: 当該のマシン向けに展開を開始しているかどうか、ということを示します。
- インストール済み: 当該のコンピューターに、更新プログラムがインストール済みであることが検出されたという事を示します。
- 必須: 当該のコンピューターに、更新プログラムが必要であることが検出されたということを示します。
- 期限: 展開管理の期限です。この期限を過ぎると、"必須" の状態の場合、強制的にインストールが実行されます。

※ 更新の適用が不要な更新プログラムについては、本レポートには表示されません。

 

- 更新プログラム単位で一覧する

「KB○○はどのマシンで必要なのか?」、「KB○○はどのマシンでインストール済みなのか?」といった情報について、更新プログラム単位でのリストアップを行うには、それぞれ以下のようにレポートを活用します。

こちらは、レポートの仕組みが SCCM 2007 と SCCM 2012 で共通です。以下のレポート名は SCCM 2012 で記載しますが、SCCM 2007 の場合には、レポート名のはじめの "コンプライアンス" を  "対応" に読みかえてください。

"コンプライアンス 2 - 特定のソフトウェア更新プログラム" レポートから更新プログラムを KB 番号指定などで制限します。
続いて、更新プログラム名をクリックすると、"コンプライアンス 6 - 特定のソフトウェア更新プログラムの状態 (セカンダリ)" レポートに飛び、更新プログラムごとの "状態" がリストアップされます。
最後に、状態、例えば "更新を行う必要があります" をクリックすると、"コンプライアンス 8 - 更新プログラムに対して特定のコンプライアンス対応状態にあるコンピューター (セカンダリ)" レポートにジャンプし、当該の更新プログラムについて、インストールが必要なコンピューター名がリストアップされます。

最後に、補足となりますが、クエリの作り込み、あるいはカスタム レポートの作り込みにて、上記よりも複雑な条件をカスタマイズされる場合もあるかと存じます。
この場合、これらのレポートのクエリの定義を確認することを手始めにすると、データベース上で参照すべきビューの名称もあたりがつけやすいものとなります。

クエリや、カスタム レポートの作成については前回のポストをご参考ください。

[SCCM 2012] 資産管理台帳のカスタム レポートを作成する
https://blogs.technet.com/b/systemcenterjp/archive/2013/05/08/3571287.aspx

===========================================
B. ハードウェア インベントリの機能を使う
===========================================

SCCM の "ソフトウェアの更新" 機能を使うには、"ソフトウェアの更新ポイント" と呼ばれるサイト システムを構築しなければなりません。
具体的には、WSUS を SCCM 専用に作成・連携させ、WSUS の更新検出機能を活用しながら、SCCM によって細かく更新プログラムの適用状況を検出したり配布するという機能になります。

しかしながら、SCCM の "ソフトウェアの更新" の利用を予定されていない方もいらっしゃると思います。
例えば、既に WSUS を単体で使っていらっしゃるお客様で、「SCCM とは連携させずにこのまま WSUS 単体の運用を続けたい」といったご要望は極めて多いです。
このような場合、既に WSUS を利用しているため、クライアントが SCCM 用のソフトウェア更新ポイントの WSUS にスキャンを行うことが出来ませんので、本ブログの前半 A のような詳細なレポートは使えません。

この場合の代替案として、機能的な制約はあるものの、ハードウェア インベントリを使用することが有効です。

Windows XP 端末の場合、"プログラムの追加と削除" に更新プログラムも一括して記録されるため、ハードウェア インベントリの中の "プログラムの追加と削除" がそのまま利用できます。(レポートでも、"[プログラムの追加と削除]" 関連のものから取得が出来ます。)
しかしながら、Windows Vista 以降では、更新プログラムは "プログラムの追加と削除" による一括管理がされなくなったため、カスタム ハードウェア インベントリの設定が追加で必要になります。

- 制限事項について

Windows Vista 以降の OS 上において、カスタム インベントリを行って、以下の Blog にあるような "Win32_QuickFixEngineering" の情報を追加収集します。
しかしながら、以下の Blog の説明にあるとおり、取得出来ない更新プログラムがあることが制限事項となります。

[WMI] PC にインストールされている更新プログラム情報を取るために WMI "Win32_QuickFixEngineering" を使用しても取得できないものがある
https://blogs.technet.com/b/jpilmblg/archive/2009/04/24/wmi-pc-wmi-win32-quickfixengineering.aspx

完全な管理を行うのでしたら、やはり前述 "A. ソフトウェアの更新ポイントの機能を使う" による管理に変更をしていくしかありません。

- 設定方法について

SCCM 2007 の場合
---------------------
1. SCCM サイト サーバーの以下ファイルをコピーしてバックアップを取得した後、 Notepad.exe 等のテキスト エディタにて開きます。

Program Files\Micorosft Configuration Manager\inboxes\clifiles.src\hinv\sms_def.mof

2. "Win32_QuickFixEngineering" を検索します。

当該クラスの、"FALSE" をすべて "TRUE" に置き換えます。

3. Sms_def.mof を保存し、テキスト エディタを閉じます。

SCCM 2012 の場合
---------------------
1. SCCM 2012 管理者コンソールの [管理] ワークスペースを開きます。
2. 画面左ペインより、[クライアント設定] をクリックします。
3. 管理コンソールのリボンより、"カスタム クライアント デバイス設定の作成" を選択し、新しくクライアント設定を作成します。
4. 新しく作成したクライアント設定のプロパティを開き、ウィンドウの左側一覧から、"ハードウェア インベントリ" をクリックします。
5. "クラスの設定" ボタンをクリックします。
6. "ハードウェア インベントリ クラス" ウィンドウが開きます。
リスト表示から "Quick Fix Engineering (Win32_QuickFixEngineering)" にチェックし、OK を押して閉じます。
7. 手順 3 で新しく作成したクライアント設定を右クリックし、[展開] して、コレクションを割り当てて下さい。(※ この手順を忘れると、拡張インベントリが有効になりません。)

上記で、それぞれ SCCM サイト サーバー側の設定は完了です。

なお、情報の収集が完了するまでには時間を要します。
既定のハードウェア インベントリのサイクルが 7 日おきなので、すべてのクライアントの結果が出そろうまで、最長で 7 日間程度はお待ちいただく必要があります。

動作確認などで即時収集をご要望の場合、監視対象のマシンの [コントロール パネル] - [Configuration Manager] より "操作" (SCCM 2007 では "動作") タブ にある以下を選択し、"動作の開始" をクリックして下さい。

・”コンピュータ ポリシーの取得および評価サイクル”
・"ハードウェア インベントリ サイクル"
※”コンピュータ ポリシーの取得および評価サイクル” 実行後は、15分程度お待ちいただいた後で "ハードウェア インベントリ サイクル" を実行してください。

上記にて、クライアントの次回ハードウェア インベントリのタイミングで、"Quick Fix Engineering (Win32_QuickFixEngineering)" の拡張インベントリの結果が確認出来ます。
取得された情報は、リソース エクスプローラ上から、"ハードウェア\Quick Fix Engineering" にて表示可能です。しかしながら、この方法はカスタム インベントリなので、既存のレポートは用意されていません。
v_GS_QUICK_FIX_ENGINEERING というビューに全情報が格納されますので、一括して情報を見るのであれば、クエリか、カスタム レポートを作成して運用をする必要があります。

カスタム レポートの作成のヒントとして、以下もご活用ください。

[SCCM 2012] 資産管理台帳のカスタム レポートを作成する
https://blogs.technet.com/b/systemcenterjp/archive/2013/05/08/3571287.aspx