Windows Management Instrumentation

Windows Management Instrumentation (WMI)とは



Windows Management Instrumentation (WMI) は、Windowsオペレーティングシステム (OS) において、システムの構成要素に関する情報の収集と通知を行うためのインターフェースです。これは、Windows Driver Modelの拡張として機能し、システムのハードウェアソフトウェアの状態を監視し、管理するための基盤を提供します。WMIは、Distributed Management Task Force (DMTF) によって定められたWeb-Based Enterprise Management (WBEM) と Common Information Model (CIM) 標準のマイクロソフトによる実装です。

WMIを利用することで、VBScriptやPowerShellのようなスクリプト言語を使用して、ローカルまたはリモートのWindowsコンピュータやサーバーを管理できます。WMIはWindows Vista、Windows Server 2003、Windows XP、Windows Me、Windows 2000に最初から組み込まれており、Windows 95およびWindows 98向けにはダウンロードで利用可能です。

また、マイクロソフトはWMIのコマンドラインインターフェースとして、Windows Management Instrumentation Command-line (WMIC) を提供しています。

WMIの目的



WMIの主な目的は、オープンな仕様の管理情報を提供することで、異なるOS環境で動作する管理アプリケーション間で情報を共有できるようにすることです。WMIはシステム管理標準を定め、Desktop Management Interface (DMI) やSimple Network Management Protocol (SNMP) などの既存の管理標準との連携も考慮されています。WMIは、多様な情報源からの管理データを共通の方法でアクセスできるようにすることで、これらの標準を補完します。

WMIの概要



管理手法を統一し単純化するために、DMTFは管理対象を統一的な方法で表現するCommon Information Model (CIM) を定義しました。CIMオブジェクトモデルは、ハードウェアソフトウェアのメーカーを問わず、共通の用語と意味論を用いたオブジェクトデータベースモデルです。このオブジェクトモデルは、CIMリポジトリと呼ばれるデータベースに実装されます。

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

多くのマイクロソフトアプリケーション(Microsoft [[SQL Server]]、Exchange Server、Microsoft OfficeInternet Explorerなど)は、インストール処理の一部として、標準のCIMを拡張し、それぞれの管理情報をCIMリポジトリに格納します。これは「WMIクラス」と呼ばれ、属性と値のペアで管理情報を保持し、メソッドでアクションを実行できます。

管理対象へのアクセスは、「プロバイダ」と呼ばれるソフトウェアコンポーネントを介して行われます。プロバイダはC/C++で書かれたCOMオブジェクトを実装したDLLです。プロバイダは特定の管理情報にアクセスするように設計されており、CIMリポジトリは「ネームスペース」と呼ばれる領域に論理的に分割されます。各ネームスペースには、特定の管理領域に関わるクラス群のプロバイダが含まれます(例:Active DirectoryのためのRootDirectoryDAP、SNMP情報のためのRootSNMPなど)。

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

WMIの開発プロセス



WMIは、CIMとプロバイダを通じて管理対象を抽象化するため、プロバイダの開発にはいくつかのステップが必要です。主な4つのステップは以下の通りです。

1. 管理対象モデルの作成
モデル定義
モデル実装
2. WMIプロバイダの作成
実装するプロバイダの種類の決定
プロバイダのホスティングモデルの決定
ATLウィザードを使用したプロバイダのテンプレート作成
プロバイダのコード実装
プロバイダのWMIとシステムへの登録
3. プロバイダのテスト
4. 利用者向けサンプルコードの作成

WMIプロバイダの普及



Windows NT 4.0 SP4で最初のWMI実装がリリースされて以来、マイクロソフトはWindowsにWMIプロバイダを着実に増やしてきました。Windows NT 4.0では15個、Windows 2000では29個、Windows Server 2003では80個のプロバイダが実装されています。Windows Vistaではさらに13個のプロバイダが追加され、合計で100近くのプロバイダが存在します。これにより、WMIはWindowsにおいて普遍的な管理層としての地位を確立しつつあります。

ITシステム管理の分野では、WMIに基づいたスクリプトや自動化プロシージャの開発が盛んに行われています。また、MOM、SMS、ADS、HP OpenView for Windows (HPOV)、BMCソフトウェア、CAなどの管理ソフトウェアも、WMIに基づいて管理情報を提供・操作するユーザインターフェースを追加しています。これにより、スクリプトが使えない管理者でも、WMIの知識がなくてもWMIを利用できるようになっています。もちろん、スクリプトを使ってWMIを操作することで、より柔軟な対応も可能です。

具体例



.NET Frameworkには、WMIのマネージラッパー (System.Management.dll) が用意されており、System.Management.ManagementClassクラスがCIM管理クラスを表します。WMIクラスの例として、ディスクドライブならWin32_LogicalDisk、実行中のプログラムならWin32_Processがあります。

以下の例は、C#で記述された、現在接続しているWi-FiネットワークのSSIDを取得するコードです。

csharp
using System;
using System.Management;

public class GetWifiSSID
{
public static void Main(string[] args)
{
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT
FROM MSNdis_80211_ServiceSetIdentifier");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("SSID: {0}", queryObj["SSID"]);
}
}
catch (ManagementException e)
{
Console.WriteLine("An error occurred: " + e.Message);
}
}
}


参考文献



WMI at the Windows Hardware Developer Central
CIM terminology
WMI Overview and Background
WMI and CIM overview
How improved support for WMI makes PowerShell the best environment to use and script WMI
Working with WMI providers to PowerShell

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。