WMI インスタンスの取得
インスタンスの取得は、WMI で実行する可能性が高い最も一般的な取得手順の 1 つです。 既存のインスタンスを取得することも、名前が付いていない新規インスタンスを作成することもできます。 既存のインスタンスへの WMI パスは必須パラメータです。 詳細については、「WMI オブジェクトの場所の説明」を参照してください。
Note
インスタンスを指定するときに、プロバイダーが特定のプロパティの値を指定できない場合があります。 プロパティの記述に特に明記されていない限り、空の値から意味を推測することはできません。 これを、NULL 値を持つ文字列と混同しないようにしてください。 この場合、値が設定されます。 空ですが、値 NULL を持っています。
PowerShell の Get-WmiObject コマンドレットを呼び出して、インスタンスのローカル コピーを取得します。
PowerShell を使用して WMI クラスのインスタンスを取得する方法
-class および -filter パラメータを使用して、特定のインスタンスを取得できます。
Get-WmiObject -query "SELECT * FROM Win32_logicalDisk WHERE DeviceID = 'C:'"
CimInstance を使用して検索オブジェクトを作成し、それに関連するキー値を入力し、そのオブジェクトを CimSession.GetInstance 呼び出しで検索することで、C# を使用して WMI インスタンスを取得できます。
C# を使用して WMI クラスのインスタンスを取得する方法 (Microsoft.Management.Infrastructure)
Microsoft.Management.Infrastructure 名前空間を使用して、関連するクラス名と名前空間を持つ新しい CimInstance オブジェクトを作成します。
using Microsoft.Management.Infrastructure; ... string Namespace = @"root\cimv2"; string className = "Win32_LogicalDisk"; CimInstance myDrive = new CimInstance(className, Namespace);
検索するインスタンスのキー プロパティの名前と値を含む CimProperty を作成し、そのプロパティをクラス オブジェクトに追加します。
myDrive.CimInstanceProperties.Add(CimProperty.Create("DeviceID", "C:", CimFlags.Key));
CimSession.GetInstance 呼び出しを使用して WMI からオブジェクトを取得します。
CimSession mySession = CimSession.Create("localhost"); CimInstance searchInstance = mySession.GetInstance(Namespace, myDrive);
System.Management 名前空間のクラスを使用して、特定の WMI クラス インスタンスを取得することも、WMI クラス インスタンスのコレクションを取得することもできます。
Note
System.Management は、元来 WMI へのアクセスに使用されていた .NET 名前空間でした。しかし、この名前空間の API は一般に、より最しい Microsoft.Management.Infrastructure の対応する API と比較して低速で、拡張性も劣ります。
C# を使用して WMI クラスのインスタンスを取得する方法 (System.Management)
ManagementPath パラメータで渡された名前と特定のインスタンス値を使用して、新しい ManagementObject を作成することで、特定のインスタンスのローカル コピーを取得します。 その後、ManagementObject.Get を明示的に呼び出すことで、インスタンス データを取得できます。
using System.Management; ... ManagementObject objInst = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'"); objInst.Get();
または、ManagementObjectSearcher で検索し、返された ManagementObjectCollection を列挙することで、WMI クラスのすべてのインスタンスを取得することもできます。
using System.Management; ... ManagementObjectSearcher mgmtObjSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk"); ManagementObjectCollection colDisks = mgmtObjSearcher.Get(); foreach (ManagementObject objDisk in colDisks) { Console.WriteLine("Device ID : {0}", objDisk["DeviceID"]); } Console.ReadLine();
インスタンスにアクセスすることで、Get メソッドを暗黙的に呼び出すことができます。 詳細については、「WMI インスタンスの一部の取得」を参照してください。
VBScript GetObject メソッドを呼び出して、インスタンスのローカル コピーを取得します。
VBScript を使用して WMI クラスのインスタンスを取得する方法
次の例に示すように、インスタンスのオブジェクト パスを指定して GetObject を呼び出します。
Set objinst = GetObject("WinMgmts:Win32_LogicalDisk='C:'")
特定のインスタンスを取得するには、オブジェクト パスの一部として名前を指定する必要があります。
C++ では、IWbemServices::GetObject を呼び出します。
C++ を使用して WMI クラスのインスタンスを取得する方法
IWbemServices::GetObject または IWbemServices::GetObjectAsync を呼び出して、インスタンスのローカル コピーを取得します。 オブジェクトへの WMI パスを含める必要があります。
名前が示すように、GetObjectAsync はインスタンスを非同期的に取得するのに対して、GetObject はインスタンスを同期的に取得します。 非同期取得を使用する場合は、IWbemObjectSink インターフェイスを実装する必要があります。