检索 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 接口。