ハードウェア インベントリで HKLM 配下の特定のレジストリを収集する ~使い方シリーズ~

Last Update:

みなさま、こんにちは。Configuration Manager サポート チームです。

使い方シリーズ、今回はハードウェア インベントリで HKLM 配下の特定のレジストリを収集する方法についてご案内いたします。
特定のレジストリ値を収集して、管理コンソールやレポートで確認したいという場合に本手順をお役立ていただけますと幸いです。

想定シナリオ

以下のレジストリ値を収集して、値が 2 のデバイスを抽出することを目的とします。

1
2
キー:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
値 :DisableIPSourceRouting (REG_DWORD)

他のレジストリ値についても、mof ファイルをレジストリ値に応じてカスタマイズすることで収集可能ですのでお試しください。

手順

以下の流れで手順を進めていきます。

  1. MOF ファイルを作成する
  2. インベントリの収集対象に追加する

1. MOF ファイルを作成する

まずはテスト端末で手順をお試しください。

1
2
キー:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
値 :DisableIPSourceRouting (REG_DWORD)
  1. 取得したいレジストリ値の MOF ファイルを作成します。
    configuration.mof 追記用とインポート用の 2 つの MOF ファイルが必要となります。
    例えば、今回収集対象とするレジストリ値の場合は以下の通りです。
  • configuration.mof

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #pragma namespace ("\\\\.\\root\\cimv2")
    #pragma deleteclass("TcpipParametersInfo", NOFAIL)
    [DYNPROPS]
    Class TcpipParametersInfo
    {
    [key] string KeyName;
    Uint32 DisableIPSourceRouting;
    };

    [DYNPROPS]
    Instance of TcpipParametersInfo
    {
    KeyName="Value";
    [PropertyContext("Local|HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters|DisableIPSourceRouting"),Dynamic,Provider("RegPropProv")] DisableIPSourceRouting;
    };
  • importclass.mof

    1
    2
    3
    4
    5
    6
    7
    8
    #pragma namespace ("\\\\.\\root\\cimv2")
    #pragma deleteclass("TcpipParametersInfo", NOFAIL)
    [SMS_Report(TRUE),SMS_Group_Name("TcpipParametersInfo"),SMS_Class_ID("TcpipParametersInfo")]
    Class TcpipParametersInfo: SMS_Class_Template
    {
    [SMS_Report(TRUE),key] string KeyName;
    [SMS_Report(TRUE)] Uint32 DisableIPSourceRouting;
    };

上記 MOF ファイル内の「TcpipParametersInfo」の部分は任意の名前で構いません。
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters の部分は収集対象にしたいレジストリ キーになります。
DisableIPSourceRouting の部分は収集対象にしたいレジストリ値になります。

準備ができた後、検証用のコンピューターでコマンド プロンプトから MOF ファイルのあるパスに移動し、以下のコマンドを実行します。

mofcomp -check xxxx.mof 
(xxxx にはmof につけたファイル名を入れてください)

構文チェックでエラーが出力されないことを確認しましょう。

2. インベントリの収集対象に追加する

  1. 最上位の Configuration Manager サイト サーバー (中央管理サイト、及びスタンドアロン プライマリ サイト) にて、以下のファイルをバックアップしておきます。

\Program Files\Microsoft Configuration Manager\inboxes\clifiles.src\hinv\configuration.mof
※ \Program Files\Microsoft Configuration Manager は Configuration Manager サイトのインストール先に応じて変更されます。

  1. configuration.mof をメモ帳で開き、手順 1. で作成した configuration.mof 追記用 MOF ファイルの内容を一番下に追記して保存します。具体的には、ファイル末尾の “Added extensions start/ end” の 2 行の間に挿入します。

  2. 上記作業により、SMS_EXECUTIVE サービスがまもなくファイルの変更を検知し、追加内容をクライアントへのポリシーに変換します。

  3. 最上位のサイト サーバーにて、Configuration Manager コンソールを起動し、[管理] - [クライアント設定] を開きます。

  4. 右上ペインに表示された [既定のクライアント設定] を右クリックして、プロパティを開きます。

  5. [既定の設定] 画面のハードウェア インベントリを開き、[クラスの設定] をクリックします。

  6. [インポート] ボタンをクリックして、手順 1. で作成したインポート用 MOF ファイルをインポートします。

  7. 追加されたクラスのチェック ボックスをオンにして、[OK] をクリックします。

  8. 動作確認のため、サイト管理下にある Configuration Manager クライアントが動作しているテスト マシンにおいて、コントロールパネルから Configuration Manager を開いて、以下のサイクルを順番に実行します。

  • [コンピューターポリシーの取得および評価サイクル]
  • [ハードウェア インベントリ サイクル]

反映されたポリシーを受信するまでに時間がかかる場合がありますので、テストの際は上記サイクルを何度か実行ください。

拡張したハードウェアインベントリが正常に収集されると、Configuration Manager コンソールから対象マシンを右クリックして、リソース エクスプローラを起動することで、収集したレジストリ情報をご確認いただけます。

また、収集したレジストリ情報は、サイト データベースに存在するv_GS_<クラス名>0 ビューより参照することができます。
(上記例ではクラス名が TcpipParametersInfo でしたので、ビュー名は v_GS_TcpipParametersInfo0 となります。)

収集したレジストリ値が、サーバー側に反映されるタイミングについて

MOF ファイルで定義したレジストリ値は、ハードウェア インベントリ データの 1 つとして収集されます。
データがサイト サーバーに送信され、正常に処理が完了した時点で、データベースに格納されます。
また、クライアントは、サイト サーバーで設定されたスケジュールに従って、それぞれインベントリを収集します。

インベントリの実行間隔は、既定では 7 日毎に実行されるように設定されておりますので、クライアントに設定されたレジストリ値が、把握できるようになるまで、時間差が生じる可能性がございます。
実行間隔はクライアント設定で変更可能ですが、頻繁にインベントリ収集が行われるように設定した場合、ネットワーク トラフィックの増加、及びデータを処理するサイト サーバーの CPU 負荷の上昇といった現象が発生する場合もございます。
そのため、実行間隔の設定値については、クライアント台数やサイト サーバーの処理能力、ネットワーク環境を踏まえた上で、ご検討ください。

結果を確認する方法

収集されたレジストリ値については、以下の 2 つの方法で確認できます。

  1. データベースに SQL を発行して確認する
  2. コレクションを作成して確認する

1. データベースに SQL を発行して確認する

収集したレジストリは、サイト データベースに格納されます。
今回収集したレジストリ値は、v_GS_TcpipParametersInfo0 より参照できますので、以下の SQL で出力された結果より、DisableIPSourceRouting が 2 のデバイスが確認できます。

1
2
select b.Name0,a.DisableIPSourceRouting0 from v_GS_TcpipParametersInfo0 a join v_R_System b on a.ResourceID=b.ResourceID
where a.DisableIPSourceRouting0=2

SQL の実行方法については、以下の記事をご参照ください。

Title: SQL Query 結果の出力方法について
URL: https://jpmem.github.io/memlog/configmgr/sql/sqlquery.html

2. コレクションを作成して確認する

収集したレジストリ値をもとに、DisableIPSourceRouting が 2 のデバイスのみが所属するコレクションを作成します。

  1. Configuration Manager コンソールを起動し、[資産とコンプライアンス] - [デバイス コレクション] を開きます。

  2. [デバイス コレクション] を右クリックし、[デバイス コレクションの作成] を選択します。

  3. [デバイス コレクションの作成] ウィザードが起動します。

  4. [全般] にて、次の設定を行います。

  • [名前] フィールドに任意のコレクション名を記入します。
  • [限定コレクション] の [参照] ボタンをクリックし、対象のコレクション(例:”すべてのシステム”)を選択します。
  1. [メンバーシップの規則] にて以下の設定を行います。
  • [規則の追加] - [クエリ規則] を選択します。
  • [クエリ規則のプロパティ] の設定で、以下の設定を行います。
    • [名前] フィールドに適宜名前を入力します。
    • [クエリ ステートメントの編集] をクリックします。
  • クエリ ステートメントのプロパティが開きます。
    • [条件] タブを選択し、黄色いボタンをクリックします。
    • [条件プロパティ] が開きますので、以下のように条件指定して [OK] をクリックします。クエリ ステートメントのプロパティに戻り [OK] をクリックしてクエリのプロパティ画面をすべて閉じます。

<DisableIPSourceRouting が 2 のデバイス 抽出用の条件>

1
2
3
4
5
条件の種類:    単純な値
属性クラス: TcpipParametersInfo
属性 : DisableIPSourceRouting
演算子 : が次の値に等しい
値 : 2
  1. [次へ] をクリックして、ウィザードを進め、デバイス コレクションの作成ウィザードを終了します。

  2. [デバイス コレクション] 画面にて作成したコレクションを右クリックして [メンバーシップの更新] を実行します。

  3. 作成したコレクションを右クリックして [メンバーの表示] を実行します。

コレクション作成後、DisableIPSourceRouting のインベントリを送信した端末の中で、その値が 2 のデバイスが作成したコレクションに表示されていきますので、経過をご確認ください。
最終的に、意図する端末がコレクション上に表示されているかどうかをご確認ください。

※ コレクション作成の注意点
本手順にて利用しているクエリは、ハードウェア インベントリによって収集するように構成したレジストリ値を参照しています。

期待通りのクエリ結果とならない場合は、リソース エクスプローラを利用してハードウェア インベントリの収集状況およびレジストリの値をご確認ください。

Title: Configuration Manager でリソース エクスプローラーを使用してハードウェア インベントリを表示する方法
URL: https://docs.microsoft.com/ja-jp/mem/configmgr/core/clients/manage/inventory/use-resource-explorer-to-view-hardware-inventory

[ハードウェア] - [ワークステーションのステータス] で、最後にクライアントのハードウェア インベントリがレポートされた時間を確認します。
次に [ハードウェア] - [TcpipParametersInfo] で “DisableIPSourceRouting” の値を確認します。