WMI のススメ 2004.05.13 kanegon - WMI(Microsoft Windows Management Instrumentation) とは WBEM (Web-based Enterprise Management) イニシアチブと、 DMTF (Distributed Management Task Force)によって採用された CIM(Common Information Model) をベースとしたスケーラブルな管理基盤である。 WMI には、CIM で定義されている管理オブジェクトと、Windows プラットフォームで取 得できる付加的な情報のための CIM モデルの拡張が含まれている。 ...とのこと。なんか知らない単語が多くてよく分からない。 でもこの辺のことは分からなくても使えるし、とにかく便利なので、一度試してみるこ とをお勧めする。 詳しいことが知りたければ、一番下にある参考リンクを辿ってみればよい。 - なぜ WMI か WMI を使うことで OS やアプリケーションが管理する非常に多くの情報に対して、統一 したインターフェイスによるアクセスが可能になる。 WMI で参照可能な情報には以下のそれぞれ個別のツールで表示および管理されている情 報を含み、非常に多岐にわたる。 ちなみに Win2000 では標準のコンポーネントである。 - コンピュータの管理で参照できるような一連の情報 (OS設定、ユーザ管理情報、他多数) - BIOS情報、ハードウェア情報、ネットワーク設定など - イベントログ - プロセスやパフォーマンス カウンタ等の動的情報 - 他多数... これらの情報のカテゴリはクラスとして管理され、そのクラス数は軽く100を超える。 それぞれのクラスの情報に対して、すべて共通のインタフェースでアクセスし情報を取 得でき、また、一部の情報は更新や操作が可能である。さらにイベントとしていくつか の情報通知を受け取って処理することもできる。 このほか、以下のような特徴もある。 - 透過的なリモート処理 - スクリプトインタフェース ローカルと同じようにリモートマシンの情報に容易にアクセスすることができ、かつ、 それを簡単なスクリプトで記述できる。これにはリモートマシンのリブートを行うといっ た処理も含む。 - できること 以下は、Microsoft のページからの抜粋。 これはできることのほんの一部を示している。 これらのほとんどが 5〜10 行のスクリプトで記述可能である。 - インストールされているサービスの一覧を列挙して、「自動」開始モードが設定さ れているけれど停止しているサービスを特定する。 - マイ コンピュータに含まれている論理ディスク パーティションをすべて列挙して、 空き領域が 20 パーセント以下のディスク パーティションを特定する。 - 標準で選択されるオペレーティング システムがブートされるまでの遅延時間を変 更する。 - 「アプリケーション」イベント ログのバックアップを作成し、ログ ファイルをク リアする。 - 同僚のデスクトップ システムをリブートする(心配は無用です。このために彼か らセキュリティ パーミッションをもらう必要があります。セキュリティについて 彼と話をするよいチャンスです)。 - WMI メソッドを通じて「メモ帳」ユーティリティを起動する。 - イベント コンシューマを設定して、イベント ログに追加される新しいイベントを 監視する。 - CPU の利用率が 50 パーセントを超えるとイベントをリクエストするよう、イベン ト コンシューマ スクリプトを再構成する。 - 具体例 とりあえず 1 つだけ例をあげるが、どの情報へのアクセスも基本的な構造はほとんど同じ。 ---- process.js ----------------------------------------------- // プロセスを列挙するサンプル var processes = GetObject("winmgmts:!\\\\.\\root\\cimv2").ExecQuery("Select * from Win32_Process"); var e = new Enumerator(processes); for (; ! e.atEnd(); e.moveNext()) { var process = e.item(); WScript.Echo([process.ProcessId, process.Description].join("\t")); } --------------------------------------------------------------- ちなみに引数で値を返すメソッドとかあったりして JavaScript は(VBScriptに比べて) どうもお勧めではないみたい。 - 関連リソース これから WMI を覚えようという人は、以下の TechNet Script Center Sample Scripts は必携。 このサンプル集は WMI だけを扱うものではないが、WMI の例が多く、また WMI 以外の 例もかなり有用なものを含むため、手元に置いておいて損はない。 あと、WMI にどのようなクラスがあり、どのような情報が参照できるのかについては Scriptomatic Tool が便利。システムに登録されている WMI のクラスの列挙とそのク ラスを使って情報を取得するスクリプトの自動生成を行ってくれる。 WMI の入門サイトとかでは WMI Administrative Tools (CMI Studioなんかを含む) が 紹介されている。ただ個人的には、このツールは使いこなすには必須なのかもしれない が、初めての人がちょっとだけ試してみるには敷居が高そうに感じている。 (もっとも WMI を使おうという人であれば全然問題ないのかも知れないが...) WMI による Windows の管理 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnwmi/htm/wmi.asp TechNet Script Center Sample Scripts http://www.microsoft.com/downloads/details.aspx?displaylang=en&familyid=b4cb2678-dafb-4e30-b2da-b8814fe2da5a Scriptomatic Tool http://www.microsoft.com/technet/community/scriptcenter/tools/wmimatic.mspx WMI Administrative Tools http://www.microsoft.com/downloads/details.aspx?FamilyID=6430F853-1120-48DB-8CC5-F2ABDC3ED314&displaylang=en WMI スクリプト入門 : 第 1 部 http://www.microsoft.com/japan/msdn/columns/scripting/scripting06112002.asp WMI スクリプト入門 : 第 2 部 http://www.microsoft.com/japan/msdn/columns/scripting/scripting08132002.asp IIS の WMI プロバイダを使用する http://www.microsoft.com/japan/technet/treeview/default.asp?url=/japan/technet/prodtechnol/windowsserver2003/proddocs/entserver/prog_wmi_using.asp この他、WinXP では以下のようなコマンドを含むらしい。 - WMI Tester - WMI コマンド ライン Win9x および NT4.0 では別途、以下の導入が必要になる。 WMI SDK 1.5 (Windows 95/98/NT 4.0) http://www.microsoft.com/downloads/details.aspx?FamilyID=afe41f46-e213-4cbf-9c5b-fbf236e0e875&displaylang=ja