擷取 WMI 實例
在 WMI 中,擷取實例是您最常進行的擷取操作之一。 您可以擷取現有的實例,或建立新的未命名實例。 現有實例的 WMI 路徑是必要參數。 如需詳細資訊,請參閱 描述 WMI 物件的位置。
注意
提供實例時,提供者可能無法提供特定屬性的值。 除非屬性描述另有說明,否則您無法從空值推斷任何意義。 這不會與具有 NULL 值的字串混淆。 在此情況下,會填入值。 它是空的,但具有值:NULL。
使用呼叫 PowerShell Get-WmiObject Cmdlet 來擷取實例的本機複本。
使用 PowerShell 來取得 WMI 類別的實例
您可以使用 -class 和 -filter 參數來擷取特定實例。
Get-WmiObject -query "SELECT * FROM Win32_logicalDisk WHERE DeviceID = 'C:'"
您可以使用 C# 來擷取 WMI 實例,方法是使用 CimInstance建立搜尋物件,然後將它填入相關的索引鍵值,然後使用 CimSession.GetInstance 呼叫來搜尋該物件。
使用 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 類別實例的集合。
注意
System.Management 是用來存取 WMI 的原始 .NET 命名空間,不過,此命名空間中的 API 通常較慢,並且相較於其較新的 Microsoft.Management.Infrastructure 對應項目,在擴展性方面表現也不佳。
使用 C# 取得 WMI 類別的實例(System.Management)
藉由建立新的 ManagementObject來擷取特定實例的本機複本,其名稱和特定實例值會透過 ManagementPath 參數傳入。 接著,您可以藉由明確呼叫 ManagementObject.Get來擷取實例數據。
using System.Management; ... ManagementObject objInst = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'"); objInst.Get();
或者,您可以使用 ManagementObjectSearcher來搜尋 WMI 類別的所有實例,然後列舉傳回的 ManagementObjectCollection。
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 介面。