WMIとWQL|企業クライアント戦略|ブログ|Computerworld

header_cwr_head_mid_fl_logo

CW_ウルトラバナー_Topics04

CW_ウルトラバナー_Topics05

CW_ウルトラバナー_Topics06

CW_ウルトラバナー_Topics07

CW_ウルトラバナー_Topics08

企業クライアント戦略

WMIとWQL

Posted by 横山哲也 ( 2010年03月29日 )

第1回では「クライアントPCの管理」の考え方について触れたが、具体的に「管理」とは何かについて言及しなかった。システム管理者にとっては当たり前の概念だが、説明するのは意外に難しい。

筆者は「クライアントPCの管理」をこう考えている。

「そこにあるべきものがあり、正しい設定が行なわれている状態を保証すること」

管理者が知らないPCが勝手に増えていたり、管理者が設定した覚えのない機能が追加されていたりするのは管理された状態ではない。

管理された状態を維持するには、PCの状態を読み取り、あるべき姿かどうかを検査し、違っていれば正しい設定を行なう必要がある。Windows、特にWindows 2000以前の場合、基本的な設定はGUIのみで行うことを想定しており、適切なコマンドラインインターフェースが少なかった。またWindowsの設定を画面に表示することはできても、他のプログラムに渡す機能は十分ではなかった。

適切な「PCの管理」を行なうためには管理ツールが不可欠である。しかしWindowsには管理ツールの要求に対してWindowsの構成情報を渡し、適切な設定を行なうための機能がなかった。そこで制定されたのがWMI (Windows Management Instrumentation)である。

WMIはVBScriptやPerlなどからも呼び出せる他、コマンドラインインターフェースも備わっている。Windows XP以降であればWMICコマンドでWMIの多くの機能を利用できる。

たとえば以下のコマンドを実行してみて欲しい(実際に実行する前には、すべてのアプリケーションを終了し、データを保存し、念のためバックアップを取っておくこと)。

WMIC process where name="csrss.exe" delete

STOPエラー(いわゆる「ブルースクリーン」)が出て、OSが停止したはずだ。CSRSS.EXEは、Windowsの実行に不可欠なプロセスであり、タスクマネージャなどでは削除できない。また、CSRSS.EXEが終了するとWindowsの正常な動作が妨げられると判断して、Windows自身が緊急停止を行なう。その結果STOPエラーが発生する。

WMIは、普通のコマンドやツールでは実行できないことも実行できる強力なツールなのである。

ただし、WMIを使いこなすのは意外に難しい。それは、WMIによる管理対象が巨大な階層構造で管理されていること、そして管理対象の属性を読み取るためにはWQL(WMI Query Language)と呼ばれるSQL風の構文を指定する必要があるからだ。

マイクロソフトのWebサイトにはこんなページがある。

Microsoft® Windows Management Instrumentation (WMI) は、Microsoft の最大の秘密です。あるいは、そのように言われています。

これはコラムなので、多少の誇張やジョークが入っているとは言え、WMIの難解さはマイクロソフト自身が認めている。

WMIを簡単に使う方法は2つある。1つはTechNetのスクリプトセンターにアクセスし、サンプルコードを入手すること。もう1つは「Scriptomatic」ツールを使ってスクリプトを自動生成することだ。特にScriptomaticはシンプルなコードで汎用性が高く便利だと思う。詳しくはスクリプトセンター内の記事「Scriptomaticツール」を参照して欲しい。

なお、条件を指定して情報を抽出する方法としてSQL風の構文は広く使われている。小説「涼宮ハルヒの憂鬱」では、長門有希(筆者の一押しキャラクタである)がこういう構文を実行する。

select シリアルコード from データベース where コードデータ order by 攻性情報戦闘 having ターミネートモード

SQLの専門家に言わせれば「思わず添削してしまいそうな」変なSQL文(SQL風の文)だそうだが、きっとSQL風の別の構文なのだろう。

WQLもSQL文と完全互換ではない(基本的にはSQLのサブセットである)ので注意して欲しい。

ページの先頭へ戻る