'''Windows Management Instrumentation'''( ('''WMI''')) は、[[Windows Driver Model]]への拡張の一種で、システムの構成要素について情報収集と通知を行う[[オペレーティングシステム]] (OS) の[[インタフェース (情報技術)|インタフェース]]を提供する。WMI は[[Distributed Management Task Force]] (DMTF) の定めた [[Web-Based Enterprise Management]] (WBEM) と [[Common Information Model]] (CIM) 標準の[[マイクロソフト]]による実装である。
WMI により、[[Microsoft Windows|Windows]]を搭載した[[パーソナルコンピュータ]]や[[サーバ]]を [[VBScript]] や [[Windows PowerShell|PowerShell]] のような[[スクリプト言語]]で(ローカルでもリモートでも)管理できるようになる。WMI は [[Microsoft Windows Vista|Windows Vista]]、[[Microsoft Windows Server 2003|Windows Server 2003]]、[[Microsoft Windows XP|Windows XP]]、[[Microsoft Windows Millennium Edition|Windows Me]]、[[Microsoft Windows 2000|Windows 2000]] に最初から実装されている。[[Microsoft Windows 95|Windows 95]] および [[Microsoft Windows 98|Windows 98]] 向けの WMI はダウンロード可能である<ref name=WMIDownload>[http://www.microsoft.com/downloads/details.aspx?familyid=98a4c5ba-337b-4e92-8c18-a63847760ea5&displaylang=en WMI Redistributable for Windows 95 and Windows 98]</ref>。
また、マイクロソフトはWMIの[[キャラクターユーザインターフェース]]として '''Windows Management Instrumentation Command-line''' ('''WMIC''') を提供している<ref> [http://support.microsoft.com/kb/290216 Description of WMIC] </ref>。
== WMIの目的 ==
WMIの目的は、オープンな仕様の管理情報を提供することで、各種OS環境で動作する管理[[アプリケーションソフトウェア|アプリケーション]]群がそれら情報を共有できるようにすることである。WMIでは[[システム管理]]標準を定め、[[Desktop Management Interface]] (DMI) や [[Simple Network Management Protocol|SNMP]] (SNMP) といった既存の管理標準との関連も定めている。WMI では一様なモデルを提供することで他の標準を補っている。このモデルは、任意の情報源からの管理データを共通の方法でアクセスできる管理対象環境を表している。
== 概要 ==
管理技法を統一して単純化するため、DMTF は統一的な方法で管理対象群を表現する[[Common Information Model]] (CIM) を定義した。CIM オブジェクトモデルは、全てのメーカー([[ハードウェア]]、[[ソフトウェア]])が統一的に使える用語と意味論を用いた[[オブジェクトデータベース]]モデルである。このオブジェクトモデルは CIM リポジトリと呼ばれる[[データベース]]に実装される。
CIM モデルに基づき、WMI は DMTF 標準を Windows の各要素を表せるように拡張した実際の管理対象要素を含む。また、WMI は [[Component Object Model|COM]] にも対応しており、COM対応の各種アプリケーションが管理情報を利用可能としている。
インストール処理の一部として、マイクロソフトのアプリケーションの多く([[Microsoft SQL Server]]、[[Exchange Server]]、[[Microsoft Office]]、[[Internet Explorer]]、Host Integration Server、Automated Deployment Services など)は標準のCIMモデルを拡張して、それぞれの管理情報をCIMリポジトリに格納する。これを「WMIクラス」と呼び、属性と値の組で管理情報を保持し、メソッドによって何らかのアクションを実行できるようになっている。管理対象へのアクセスは「プロバイダ」と呼ばれるソフトウェアコンポーネントを使って行われる。プロバイダの実体は、[[C言語|C]]/[[C++]]で書かれたCOMオブジェクトを実装した[[ダイナミックリンクライブラリ|DLL]]である。プロバイダは特定の管理情報にアクセスするよう設計されているため、CIMリポジトリは「ネームスペース」と呼ばれる領域に論理的に分割されている。各ネームスペースは特定の管理領域に関わるクラス群についてのプロバイダ群が含まれる(例えば、[[Active Directory]] のための RootDirectoryDAP、[[Simple Network Management Protocol|SNMP]]情報のための RootSNMP、[[Internet Information Services]] 情報のための RootMicrosoftIISv2 など)。
CIMリポジトリ上の様々な管理情報を利用するため、WMI には [[SQL]]風の言語 であるWMI Query Language (WQL) が付属している。
== 開発プロセス ==
WMI は CIM とプロバイダ群によって管理対象を抽象化しているため、プロバイダの開発にはいくつかのステップが含まれる。主な4つのステップを以下に挙げる。
#ステップ1 - 管理対象モデルを作成
== WMIプロバイダ ==
Windows NT 4.0 SP4 のころ最初の WMI 実装のリリースが行われて以来、マイクロソフトは Windows に WMI プロバイダを着実に追加してきた。 Windows NT 4.0 では、マイクロソフトは 15 の WMI プロバイダを実装していた。[[Microsoft Windows 2000|Windows 2000]] リリース時にはOSの一部として 29 のプロバイダが実装されていた。[[Microsoft Windows Server 2003|Windows Server 2003]] リリース時には 80 のプロバイダが実装されている。[[Microsoft Windows Vista|Windows Vista]] では新たなプロバイダが 13 個追加されており<ref> [http://download.microsoft.com/download/b/e/3/be37cbce-425e-45c2-a9f5-378026b5be81/04-d-WinMgmtTech-v03-TOURB-FINAL.ppt Windows Vista Client Manageability] パワーポイント文書</ref>、全部で100近くのプロバイダが存在する。これにより、WMI は Windows において遍在する管理層としての地位を確立しつつある。
このような状況から、[[情報技術|IT]][[システム管理]]の分野では、WMI に基づいたスクリプトや自動化プロシージャの開発が盛んになっている。単なるスクリプトだけでなく、[[Microsoft Operations Manager|MOM]]、[[Microsoft Systems Management Server|SMS]]、ADS、[[ヒューレット・パッカード|HP]] [[OpenView]] for Windows (HPOV)、[[BMCソフトウェア]]、[[CA (企業)|CA]] などが WMI に基づいて管理情報を提供/操作するユーザインタフェースを管理ソフトウェアに追加している。これによりスクリプト作成ができない管理者も、特にWMIに関する知識を学ばなくとも WMI を利用可能となっている。もちろん、WMI はスクリプトによって操作可能であるため、スクリプトを使えた方が選択肢は広がる。
== 例 ==
[[.NET Framework]] でにはWMIのマネージラッパー (System.Management.dll) が用意されており、ManagementClass[https://docs.microsoft.com/ja-jp/dotnet/api/system.management.managementclass System.Management.ManagementClass][[クラスが Common Information Model (CIMコンピュータ) |クラス]]がCIM管理クラスを表している。WMIクラスは、ディスクドライブなら[https://docs.microsoft.com/en-us/windows/desktop/cimwin32prov/win32-logicaldisk Win32_LogicalDisk]、Notepad.exe のような実行中プログラムなら[https://docs.microsoft.com/en-us/windows/desktop/cimwin32prov/win32-process Win32_Process ]となる。
以下の例は、"MSNdis_80211_ServiceSetIdentifier" を使って、システムが現在接続している [[Wi-Fi]] ネットワークの [[SSID]] を探す[[C Sharp|C#]]プログラムの[[ソースコード|コード]]である。
<syntaxhighlight lang="csharp">
ManagementClass mc = new
ManagementClass mc = new ManagementClass("root\\WMI", "MSNdis_80211_ServiceSetIdentifier", null);
ManagementObjectCollection moc = mc.GetInstances(); ▼
null);
▲ ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc) ▼
{
▲ foreach (ManagementObject mo in moc)
{
string wlanCard = (string)mo["InstanceName"];
bool active = (bool)mo["Active"];
byte[] ssid = (byte[])mo["Ndis80211SsId"];
}
</syntaxhighlight>
== 参考文献 ==
{{Microsoft APIs}}
{{Windows Components}}
{{Windowsコマンド}}
{{DEFAULTSORT:ういんとうすまねしめんといんすつるめんていしよん}}
{{DMTFの標準}}
{{Normdaten}}
[[de{{DEFAULTSORT:Windows Management Instrumentation ]]}}▼
[[Category:Windowsのコンポーネント]]
[[Category:Microsoft Windows]] ▼
[[Category:システム管理]]
[[Category:ネットワーク管理]]
[[Category:マネジメント・システム]]
▲[[de:Windows Management Instrumentation]]
▲[[Category: Microsoft Windows長大な項目名]]
[[en:Windows Management Instrumentation]]
[[es:Windows Management Instrumentation]]
[[fr:Windows Management Instrumentation]]
[[id:Windows Management Instrumentation]]
[[pl:Windows Management Instrumentation]]
[[ru:WMI]]
|