WMI クライアントの作成

WMI には、さまざまなクライアントで利用できる標準化されたシステム管理インフラストラクチャが用意されています。 これらのクライアントの範囲は、wmic.exe コマンド ライン ツールから System Center Operations Manager までです。 WMI スクリプト API、ネイティブ C++ API のどちらかを使用するか、または System.Management .NET Framework クラス ライブラリ名前空間の型を使用することで、独自の WMI クライアントを作成できます。

WMI クライアントを作成する方法

WMI のコア機能は、WMI リポジトリからオブジェクトを取得し、それらのオブジェクトのプロパティを調べることで構成されています。 これらのプロパティを更新したり、これらのプロパティに対してメソッドを呼び出したりすることもできます。 次の例では、ローカル コンピューターの名前を取得するという基本的な WMI 管理タスクを実行する方法を示します。

期間 説明
PowerShell を使用したクライアントの作成
WMI と PowerShell は緊密に統合されています。そのため、PowerShell を使用して WMI オブジェクトを取得するには、Get-WmiObject コマンドレットを呼び出すだけです。 一貫性を保つために、最初のコード スニペットでは多くの既定値が明示的に示されていることに注意してください。2 つ目は、既定値が正しいことを前提としています。

PowerShell
#多くの既定のパラメーターを明示的に示します $myComputer = Get-WmiObject -ComputerName "." -Namespace "root\cimv2" -Query "SELECT * FROM Win32_ComputerSystem" foreach ($computer in $myComputer) { "System Name: " + $computer.name } 

#assumes the default values are correct Get-WmiObject Win32_ComputerSystem | Format-Table "Name"

VBScript を使用したクライアントの作成

VBScript とは、WMI で一般的に使用されていた元のスクリプト言語です。 PowerShell の人気が高まる一方で、このドキュメントの既存のコード サンプルの多くは VBScript で記述されています。 この特定の VBScript サンプルでは、ローカル コンピューターのパスと偽装レベルの両方が明示的に示されていることに注意してください。これは必須ではありませんが、多くの場合で、ベスト プラクティスとされています。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objItem in colItems
    Wscript.Echo "Computer Name: " & objItem.Name
Next

C# (Microsoft.Management.Infrastructure) を使用したクライアントの作成

この名前空間には、マネージド コードを使用して WMI にアクセスするための現在のソリューションが含まれており、Windows 管理インフラストラクチャ (MI、または WMIv2) と呼ばれています。 現在、MI のテクノロジは、マネージド管理クライアントを作成するためにサポートされています。 詳細については、「マネージド MI クライアントを実装する方法」および「ネイティブ MI クライアントを実装する方法」を参照してください。

C#
using Microsoft.Management.Infrastructure; ... CimSession session = CimSession.Create("localHost"); IEnumerable<CimInstance> queryInstance = session.QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_ComputerSystem"); 

foreach (CimInstance cimObj in queryInstance) { Console.WriteLine(cimObj.CimInstanceProperties["Name"].ToString()); }

C# (System.Management) を使用したクライアントの作成

この名前空間には、マネージド コードを使用して WMI にアクセスするための元のソリューションが含まれています。 System.Management クラスは引き続き使用できますが、一般に、Microsoft.Management.Infrastructure クラスの方が効率的で、スケーリングが向上しています。 そのため、元の WMI クラスではなく MI クラスを使用することをお勧めします。

C#
using Microsoft.Management.Infrastructure; ... CimSession session = CimSession.Create("localHost"); IEnumerable<CimInstance> queryInstance = session.QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_ComputerSystem"); 

foreach (CimInstance cimObj in queryInstance) { Console.WriteLine(cimObj.CimInstanceProperties["Name"].ToString()); }

次の表に、このセクションで扱うトピックを示します。

トピック 説明
リモート コンピューター上の WMI への接続 クライアントがリモート コンピューターで WMI インフラストラクチャを使用するときに発生するさまざまな問題について説明します。
スクリプトとアプリケーションの WMI タスク WMI クライアント コードの例を示します。
WMI アプリケーションまたはスクリプトの作成 さまざまな WMI クライアントの作成に関する情報を提供します。
パフォーマンス データの監視 WMI を使用してパフォーマンス データを監視する方法について説明します。
WMI イベントの受信 WMI イベントを表示する方法について説明します。
イベントの監視 WMI イベントを監視する方法について説明します。
WQL を使用したクエリ WMI クエリ言語 (WQL) について説明します。
オプション機能の状態のクエリ Windows 7 では、WMI が Win32\_OptionalFeature クラスを実装しました。 このクラスでは、コンピューターに存在するオプション機能の状態を取得します。
WMI オブジェクトの場所の記述 WMI マネージド エンティティの場所を記述するための構文に焦点を当てます。
WMI を使用した他のオペレーティング システム機能へのアクセス デバイス ドライバー、Active Directory、SNMP デバイスにアクセスする WMI クライアントを作成する方法について説明します。
相互運用名前空間内のデータへのアクセス 関連付けプロバイダーを使うと、Windows Management Instrumentation (WMI) クライアントは、さまざまな名前空間でプロファイルおよび関連付けられたクラス インスタンスを走査して取得できます。
クラスとインスタンスの情報の操作 WMI クライアントが実行する必要がある一般的なタスクについて説明します。
クラスのリンク ビュー プロバイダーと、それを使用して複数の WMI クラスからの情報をまとめる方法について説明します。
システム レジストリの変更 WMI クライアントが WMI を使用してシステム レジストリ情報を管理する方法について説明します。