Windows Management Instrumentation

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

Windows Management InstrumentationWMI)は、Windows Driver Modelへの拡張の一種で、システムの構成要素について情報収集と通知を行うオペレーティングシステムのインタフェースを提供する。WMI はDistributed Management Task Force (DMTF)の定めた Web-Based Enterprise Management (WBEM) と Common Information Model (CIM) 標準のマイクロソフトによる実装である。

WMI により、Microsoft Windowsを搭載したパーソナルコンピュータサーバVBScriptWindows PowerShell のようなスクリプト言語で(ローカルでもリモートでも)管理できるようになる。WMI は Windows VistaWindows Server 2003Windows XPWindows MeWindows 2000 に最初から実装されている。Windows 95 および Windows 98 向けの WMI はダウンロード可能である[1]

また、マイクロソフトはWMIのキャラクターユーザインターフェースとして Windows Management Instrumentation Command-line (WMIC) を提供している[2]

WMIの目的[編集]

WMIの目的は、オープンな仕様の管理情報を提供することで、各種OS環境で動作する管理アプリケーション群がそれら情報を共有できるようにすることである。WMIではシステム管理標準を定め、Desktop Management Interface (DMI) や SNMP といった既存の管理標準との関連も定めている。WMI では一様なモデルを提供することで他の標準を補っている。このモデルは、任意の情報源からの管理データを共通の方法でアクセスできる管理対象環境を表している。

概要[編集]

管理技法を統一して単純化するため、DMTF は統一的な方法で管理対象群を表現する CIM を定義した。CIM オブジェクトモデルは、全てのメーカー(ハードウェア、ソフトウェア)が統一的に使える用語と意味論を用いたオブジェクトデータベースモデルである。このオブジェクトモデルは CIM リポジトリと呼ばれるデータベースに実装される。

CIM モデルに基づき、WMI は DMTF 標準を Windows の各要素を表せるように拡張した実際の管理対象要素を含む。また、WMI は COM にも対応しており、COM対応の各種アプリケーションが管理情報を利用可能としている。

インストール処理の一部として、マイクロソフトのアプリケーションの多く(Microsoft SQL ServerExchange ServerMicrosoft OfficeInternet Explorer、Host Integration Server、Automated Deployment Services など)は標準のCIMモデルを拡張して、それぞれの管理情報をCIMリポジトリに格納する。これを「WMIクラス」と呼び、属性と値の組で管理情報を保持し、メソッドによって何らかのアクションを実行できるようになっている。管理対象へのアクセスは「プロバイダ」と呼ばれるソフトウェアコンポーネントを使って行われる。プロバイダの実体は、C/C++で書かれたCOMオブジェクトを実装したDLLである。プロバイダは特定の管理情報にアクセスするよう設計されているため、CIMリポジトリは「ネームスペース」と呼ばれる領域に論理的に分割されている。各ネームスペースは特定の管理領域に関わるクラス群についてのプロバイダ群が含まれる(例えば、Active Directory のための RootDirectoryDAP、SNMP情報のための RootSNMP、Internet Information Services 情報のための RootMicrosoftIISv2 など)。

CIMリポジトリ上の様々な管理情報を利用するため、WMI には SQL風の言語 WMI Query Language (WQL) が付属している。

開発プロセス[編集]

WMI は CIM とプロバイダ群によって管理対象を抽象化しているため、プロバイダの開発にはいくつかのステップが含まれる。主な4つのステップを以下に挙げる。

  1. ステップ1 - 管理対象モデルを作成
    • モデル定義
    • モデル実装
  2. ステップ2 - WMIプロバイダを作成
    • 実装すべきプロバイダの種類を決定
    • プロバイダのホスティングモデルを決定
    • ATLウィザードでプロバイダのテンプレートを作成
    • プロバイダのコードを実装
    • プロバイダを WMIとシステムに登録
  3. ステップ3 - プロバイダのテスト
  4. ステップ4 - 利用者サンプルコードを作成

WMIプロバイダ[編集]

Windows NT 4.0 SP4 のころ最初の WMI 実装のリリースが行われて以来、マイクロソフトは Windows に WMI プロバイダを着実に追加してきた。 Windows NT 4.0 では、マイクロソフトは 15 の WMI プロバイダを実装していた。Windows 2000 リリース時にはOSの一部として 29 のプロバイダが実装されていた。Windows Server 2003 リリース時には 80 のプロバイダが実装されている。Windows Vista では新たなプロバイダが 13 個追加されており[3]、全部で100近くのプロバイダが存在する。これにより、WMI は Windows において遍在する管理層としての地位を確立しつつある。

このような状況から、ITシステム管理の分野では、WMI に基づいたスクリプトや自動化プロシージャの開発が盛んになっている。単なるスクリプトだけでなく、MOMSMS、ADS、HP OpenView for Windows (HPOV)、BMCソフトウェアCA などが WMI に基づいて管理情報を提供/操作するユーザインタフェースを管理ソフトウェアに追加している。これによりスクリプト作成ができない管理者も、特にWMIに関する知識を学ばなくとも WMI を利用可能となっている。もちろん、WMI はスクリプトによって操作可能であるため、スクリプトを使えた方が選択肢は広がる。

[編集]

.NET Framework では、ManagementClass クラスが Common Information Model (CIM) 管理クラスを表している。WMIクラスは、ディスクドライブなら Win32_LogicalDisk、Notepad.exe のような実行中プログラムなら Win32_Process となる。

以下の例は、"MSNdis_80211_ServiceSetIdentifier" を使って、システムが現在接続している Wi-Fi ネットワークの SSID を探すC#のコードである。

 ManagementClass mc = new 
  ManagementClass("root\\WMI", "MSNdis_80211_ServiceSetIdentifier", 
  null);
  ManagementObjectCollection moc = mc.GetInstances();
  
  foreach (ManagementObject mo in moc)
  {
   string wlanCard = (string)mo["InstanceName"];
   bool active = (bool)mo["Active"];
   byte[] ssid = (byte[])mo["Ndis80211SsId"];
  }

参考文献[編集]

  1. ^ WMI Redistributable for Windows 95 and Windows 98
  2. ^ Description of WMIC
  3. ^ Windows Vista Client Manageability パワーポイント文書

外部リンク[編集]