System Center 2012 Configuration Manager で特定のレジストリ値を収集する方法

こんにちは。System Center Support の三原です。

 

System Center 2012 Configuration Manager (以下、Configuration Manager 2012) を利用して、管理対象コンピューターに存在する特定のレジストリ値を収集したいというご要望は多くあります。

その場合、NOIDMIF ファイルを出力するスクリプトを「ソフトウェア配布」機能を利用して定期的に実行することで、NOIDMIF ファイル経由でレジストリの情報が含まれるハードウェア インベントリを収集するといった方法がありますが、ソフトウェアの配布機能で作り込みのスクリプトを実行する場合、64 bit OS のクライアントのみ、ソフトウェア センターから実行しようとすると失敗する場合があります。

具体的には、以下のことを想定している場合に、ソフトウェア センターからの手動実行に失敗いたします。

・ ハードウェア インベントリのカスタマイズのために、"HKLM\SOFTWARE\Microsoft\・・・" にアクセスして noidmif ファイルを生成するようなスクリプトを作っている

・ Configuration Manager 2012 のソフトウェアの配布機能で繰り返し実行を想定している。

・ ソフトウェア センターからの手動実行も想定している

 

失敗の原因を理解するために、まずは 64bit 版の Windows における 32bit アプリケーションの動作について簡単に解説します。

64 bit 版の Windows では 32bit のアプリケーションも利用可能とするため、システム内に 64bit サブ システムと 32bit サブ システムが別々に存在し、実行するプロセスのアーキテクチャに一致するものが自動的に使用される仕組みになっています。

そのため、%WinDir%\System32 フォルダやレジストリ キー HKLM\SOFTWARE\Microsoft を参照した場合、実行しているプロセスのアーキテクチャによって実際にアクセスしている場所が異なります。

64bit のプロセスはそのまま %WinDir%\System32 フォルダ や レジストリ キー HKLM\SOFTWARE\Microsoft が参照されます。

しかし、32bit のプロセスから見た %WinDir%\System32 フォルダやレジストリ キー HKLM\SOFTWARE\Microsoft は、実際には %WinDir%\SysWOW64 フォルダや HKLM\SOFTWARE\Wow6432Node\Microsoft にリダイレクトされています。

Configuration Manager 2012 のソフトウェア センターは 32 bit アプリケーションであるため、ソフトウェアセンターから cscript.exe を呼び出すと %WinDir%\SysWOW64 フォルダにある 32bit のプログラムが実行されます。

32bit プロセスの cscript.exe から HKLM\SOFTWARE\Microsoft の値を参照した場合、実際には HKLM\SOFTWARE\Wow6432Node\Microsoft 以下を参照しているため、意図した情報が取得できません。

64 ビット バージョンの Windows でシステム レジストリを表示する方法

https://support.microsoft.com/kb/305097/ja

 

この状況はソフトウェア センターから 64bit の cscript.exe を呼び出すことで回避できます 32bit プロセスでは %WinDir%\System32 が %WinDir%\SysWOW64 にリダイレクトされているのと同様に、%WinDir%\Sysnative というパスが %WinDir%\System32 にリダイレクトされています。

そのため、c:\windows\sysnative\cscript.exe をフルパスで実行することで、32bit アプリケーションのソフトウェア センターからでも 64bit の cscript.exe を呼び出すことができます。 64bit の cscript.exe から HKLM\SOFTWARE\Microsoft を参照した場合、リダイレクトされることがないため、意図した通りの情報が取得できます。

具体的には、以下の手順をお試しください。

========

手順

========

1.) Configuration Managerコンソールより、以下の場所に移動します。

(画面左下より) ソフトウェア ライブラリ ∟ アプリケーションの管理 ∟ パッケージ

2.) [パッケージ作成] を選択し、[パッケージとプログラムの作成ウィザード] を開きます。

3.) [パッケージ] 画面で、パッケージの名称や付随する情報を任意で入力し、[このパッケージにソース ファイルを含める] のチェック ボックスをオンにします。

4.) [ソース フォルダー] にNOIDMIF ファイルを出力するスクリプトを含むフォルダを指定し、[次へ] をクリックします。

5.) [プログラムの種類] では既定の、"標準プログラム" のまま [次へ] をクリックします。

6.) [標準プログラム] で以下の通り入力し、[次へ] をクリックします。

 

名前:任意の文字列を入力

コマンドライン: %windir%\sysnative\cscript.exe <ファイル名>.vbs

スタートアップ フォルダ: 空白

実行時の大きさ:通常

プログラムの実行条件:ユーザーのログオン状態に関係なし

実行モード:管理者権限で実行する

プログラムとの対話をユーザーに許可する:チェックしない

ドライブモード:UNC 名で実行する

 

7.) [要件] は、既定の設定のままで [次へ] をクリックします。

8.) 残りの画面は、設定変更せず次へ進み、残りの手順を完了します。

 

上記手順で作成したパッケージを配布ポイントに設定し、クライアントに展開します。

========

※ 参考情報:

========

「ファイル システム リダイレクタ」 https://msdn.microsoft.com/ja-jp/library/aa384187(v=VS.85).aspx

「レジストリ リダイレクタ」 https://msdn.microsoft.com/ja-jp/library/aa384232(v=vs.85).aspx