擷取 WMI 實例
擷取實例是您在 WMI 中執行的最常用擷取程式之一。 您可以擷取現有的實例,或建立新的未命名實例。 現有實例的 WMI 路徑是必要參數。 如需詳細資訊,請參閱 描述 WMI 物件 的位置。
注意
提供實例時,提供者可能無法提供特定屬性的值。 除非屬性描述另有說明,否則您無法從空值推斷任何意義。 這不會與具有 Null 值的字串混淆。 在此情況下,會填入值。 它是空的,但有一個值: Null 。
使用對 PowerShell Get-WmiObject Cmdlet 的呼叫,擷取實例的本機複本。
使用 PowerShell 擷取 WMI 類別的實例
您可以使用 -class 和 -filter 參數來 擷取特定實例。
Get-WmiObject -query "SELECT * FROM Win32_logicalDisk WHERE DeviceID = 'C:'"
您可以使用 CimInstance 建立搜尋物件 ,然後使用相關的索引鍵值填入 WMI 實例,然後使用 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 介面。