检索 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 类的实例