Windows TIPS
[Script] |
WMIを使うスクリプトを簡単に作成する
→ 解説をスキップして操作方法を読む
中塚 寛幸
2006/06/17 |
|
対象ソフトウェア |
.NET Framework 1.1以上 |
対象OS |
Windows 2000 |
Windows XP |
Windows Server 2003 |
|
|
 |
■ |
管理目的でWSHスクリプトを作成する場合に、Windowsの管理用インターフェイスであるWMI(Windows Management Instrumentation)を利用することがある。 |
■ |
WMIのアクセスは簡単ではないし、機能も豊富なので、調査に時間がかかる。 |
■ |
WMI Code Creatorツールを利用すると、WMIを利用するスクリプトのテンプレートを簡単に自動生成できる。 |
|
|
WMI(Windows Management Instrumentation)とは、WBEM(Web-based Enterprise Management)の標準仕様に従ってマイクロソフトが実装したWindowsシステムを管理するためのインターフェイスである。WSHスクリプトなどから呼び出すことで、Windowsの管理などを実行できる。Windows 2000以降のNTカーネルで稼働するWindows OSには、このWMIサービスが標準搭載されている。具体的には、CPU使用率やASP.NETの動作状況、各種I/Oやネットワーク・インターフェイスの状態などを確認し、設定することが可能だ。
しかしWMIは豊富な機能を持ち、メソッドやプロパティの数も膨大なので、スクリプトなどから利用するのは容易ではない。例えば、WMIのインターフェイスを利用してProcessorPerformanceの値を調査するWSHスクリプト(VBS)は以下のようになる(これは実際には、後述するツールで生成したもの)。
arrComputers = Array("TEST-SERVER01","TEST-SERVER02","TEST-SERVER03")
For Each strComputer In arrComputers
WScript.Echo
WScript.Echo "=========================================="
WScript.Echo "Computer: " & strComputer
WScript.Echo "=========================================="
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\WMI")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM ProcessorPerformance WHERE Active = True",,48)
For Each objItem in colItems
Wscript.Echo "-----------------------------------"
Wscript.Echo "ProcessorPerformance instance"
Wscript.Echo "-----------------------------------"
Wscript.Echo "Active: " & objItem.Active
Next
Next |
詳しくは説明しないが、このスクリプトでは、複数のコンピュータ(TEST-SERVER01~TEST-SERVER03)に対してWMIオブジェクトを取得し、ExecQueryメソッドで状態を取得している。スクリプトを作成するには、このようにWMIで利用できるメソッドやプロパティ、クエリ(問い合わせ)などについて精通する必要がある。
これに対し、クラスやプロパティを記憶していなくても、それらを一覧から選択することで、スクリプトのひな型を自動生成してくれる「WMI Code Creator v1.0」というツールをマイクロソフトが無償公開している。利用できるのは英語版のみだが、メッセージが英語であることを除けば、日本語環境でも問題なく利用できる。
このツールは、WMIを利用できるWindows 2000、Windows XP、Windows Server 2003で.NET Framework 1.1以上をインストールしておけば利用できる。ツールとしての主な仕様は次のとおりである。
対応OS |
Windows 2000、Windows XP、Windows Server 2003 |
必要環境 |
.NET Framework 1.1以上 |
作成できるソースコードの言語 |
C#、Visual Basic Script、Visual Basic.NET |
配布ファイル名 |
WMICodeCreator.zip |
含まれるファイル |
WMICodeCreator.exe(実行ファイル) |
WMICodeCreator.cs(C#ソースコード) |
EULA_WMI_CODE_CREATOR.rtf(ライセンス許諾書) |
 |
WMI Code Creator v.1.0の主な仕様 |
WMI Code Creatorは.zipファイルで提供されており、配布ファイルからWMICodeCreator.exeを任意のフォルダに展開すれば、インストール不要で利用できる。 |
ソースコードのひな型作成以外にも、WMI Code Creatorには、スクリプト作成を簡略化してくれるさまざまな機能がある。なおWSHの詳細については、関連記事を参照されたい。
WMI Code Creatorを以下のダウンロード・センターから入手したら、.zipファイルに含まれるWMICodeCreator.exeのみを任意のフォルダに配置しておく。
WMI Code Creatorを利用するには、ローカル・コンピュータ上のWMIサービスが起動している必要がある。さらに、リモートのコンピュータを対象としたスクリプトを作成する場合には、対象となるコンピュータのWMIサービスも起動している必要がある点に注意が必要だ。WMICodeCreator.exeを起動すると、初期化の後、次のような画面となる。
 |
WMI Code Creatorを起動したところ |
|
 |
[Code Language]でC#/Visual Basic .NET/Visual Basic Scriptから言語を選択する(デフォルトはVisual Basic Script)。[Target Computer]でスクリプトのアクセス先コンピュータを選択する。Local Computer/Remote Computer/Group of Remote Computersから選択する(デフォルトはLocal Computer)。 |
|
 |
WMIクラスからデータを検索するスクリプトを作成する場合に、このタブを選択する。 |
|
 |
WMIのメソッドを実行するスクリプトを作成する場合に、このタブを選択する。 |
|
 |
WMIのイベントを受け取るスクリプトを作成する場合に、このタブを選択する。 |
|
 |
WMIのクラスやメソッド、プロパティを調べる場合に、このタブを選択する。 |
|
WMI自体が幅広い機能を持っているので、WMI Code Creatorも幅広い機能をサポートしている。具体的には、(1)クエリでWMIが持っているデータを取得する、(2)WMIのメソッドを実行する、(3)WMIのイベントを取得するスクリプトを作成できる。また、WMIの幅広い機能を調べる辞書的な使い方もできる。ただし、WMI Code Creatorを実行しているコンピュータのWMI名前空間に基づいて動作するため、スクリプトでの操作対象がリモートのコンピュータの場合、環境の違いから、必ずしもサポートされない選択が可能になる場合があるので注意すること。
ここでは例として、豊富な機能の中から、リモートの複数コンピュータでCPUがアクティブかどうかを調べるスクリプトを生成してみる。
 |
ターゲット・コンピュータを指定する |
リモートの複数コンピュータを対象としたスクリプトを作成するので、デフォルトの設定であるLocal ComputerからGroup of Remote Computersに変更する。 |
|
 |
[Target Computer]を選択する。 |
|
 |
[Group of Remote Computers]を選択する。 |
|
[Group of Remote Computers]を選択すると、次のようなダイアログが表示されるので、対象となるコンピュータ名を入力しておく。
 |
リモートのコンピュータを指定する |
複数台のリモートのコンピュータを対象としたスクリプトを作成する場合は、表示されたダイアログのフォームに改行区切りでコンピュータ名を記述する。 |
次に[Namespace]のリストで「root\WMI」を選択する。
 |
名前空間を指定する |
[Namespace]の項目は、筆者の環境ではデフォルトだと「root\CIMV2」になっている。ここでは、「root\WMI」を選択する。例えば、Services for UNIXを実行している環境では「root\SFUAdmin」という名前空間が選択できるようになる。実際の作業では、必要な名前空間から利用できるプロパティやメソッドを選択していけばよい。 |
次に、選択した「root\WMI」名前空間にあるクラスから「ProcessorPerformance」を選択する。
 |
クラスを選択する |
筆者の環境でroot\WMI名前空間を選択すると、自動的に836個のクラスが検索された。検索されたクラスが反映されたプルダウン・メニューからProcessorPerformanceクラスを選択する。 |
すると、プロパティが14個見つかるので、そこから「Active」を選択するとスクリプトのソースコードが自動的に生成される。生成されたソースコードは、メモ帳に貼り付けたり、Visual Studioを使ってほかのコードの一部として使ったり、テスト実行して結果を確認したりできる。
 |
プロパティを選択する |
プロパティから「Active」を選択すると、ソースコードが自動的に生成される。生成されたコードは、メモ帳に貼り付けたりVisual Studioを使ってほかのコードの一部として使ったり、テスト実行して結果を確認したりできる。 |
|
 |
[Active]を選択する。 |
|
 |
Activeプロパティが持つ値を検索する。 |
|
 |
ここで値を選択する。選択を変更してもソースコードが変化しない場合もあるが、クラスやプロパティにより状況は異なる。 |
|
 |
でプロパティを選択した段階で、ソースコードが自動的に生成される。リモートのコンピュータ名などがすでに埋め込まれていることが分かる。 |
|
 |
ここをクリックするとコマンド・プロンプトのウィンドウが開き、スクリプトが実行される。 |
|
このようにWMI Code Creatorを利用すれば、ヘルプの検索作業を減らし、つまらない入力ミスを大幅に減らして、スクリプト作成を効率化できる。WMIを利用するスクリプトを作成するときには、ぜひ利用してみるとよいだろう。
Windows Server Insider フォーラム 新着記事