共用方式為


擷取 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)

  1. 使用 Microsoft.Management.Infrastructure 命名空間,使用相關的類別名稱和命名空間建立新的 CimInstance 物件。

    using Microsoft.Management.Infrastructure;
    ...
    string Namespace = @"root\cimv2";
    string className = "Win32_LogicalDisk";
    
    CimInstance myDrive = new CimInstance(className, Namespace);
    
  2. 建立 CimProperty,其中包含您要搜尋之實體的鍵屬性的名稱和值,並將該屬性新增至類別實體。

    myDrive.CimInstanceProperties.Add(CimProperty.Create("DeviceID", "C:", CimFlags.Key));
    
  3. 使用 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)

  1. 藉由建立新的 ManagementObject來擷取特定實例的本機複本,其名稱和特定實例值會透過 ManagementPath 參數傳入。 接著,您可以藉由明確呼叫 ManagementObject.Get來擷取實例數據。

    using System.Management;
    ...
    ManagementObject objInst = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'");
    objInst.Get();
    
  2. 或者,您可以使用 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 類別的實例