共用方式為


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

  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 類別的實例

  • 使用 IWbemServices::GetObject 或 IWbemServices::GetObjectAsync 呼叫 擷取實例的本機複本。 必須包含物件的 WMI 路徑。

    顧名思義, GetObjectAsync 會以非同步方式擷取實例,而 GetObject 會同步擷取實例。 如果您想要使用非同步擷取,您必須實 作 IWbemObjectSink 介面。