访问 WMI 限定符

限定符是一个提供有关 WMI 对象、方法或属性的详细信息的标记。 有时可能需要访问限定符中存储的数据。 例如,一项常见任务是通过尝试检索某个方法的 Implemented 限定符来确定提供程序是否实现了该方法。 有关详细信息,请参阅 WMI 限定符添加限定符

可以在 PowerShell 中检索 WMI 对象的限定符,方法是首先检索对象,然后像检查任何其他属性一样检查限定符。

使用 PowerShell 检索限定符

  • 使用 Get-WmiObject 检索要查看其限定符的对象,然后通过 Qualifiers 属性访问限定符:

    $myDisk = get-wmiObject Win32_LogicalDisk
    $myDisk.qualifiers
    
    #or
    
    get-wmiObject Win32_LogicalDisk | format-list qualifiers
    
    #or
    
    $myDisk = get-wmiObject Win32_LogicalDisk
    foreach ($qual in $myDisk.Qualifiers)
    { $qual }
    

    有关详细信息,请参阅检索 WMI 实例

可以在 C# 中检索 WMI 实例上的限定符,方法是首先检索对象,然后将限定符作为一个集合进行检查。

使用 C# 检索限定符 (Microsoft.System.Management)

  1. 通过使用指定的类名和命名空间创建 CimInstance 对象,检索要查看其限定符的类。

    using Microsoft.Management.Infrastructure;
    ...
    CimSession mySession = CimSession.Create("localhost");
    CimInstance diskDrive = new CimInstance(className, Namespace);
    diskDrive.CimInstanceProperties.Add(CimProperty.Create("DeviceID", "C:", CimFlags.Key));
    CimInstance myDrive = mySession.GetInstance(Namespace, diskDrive);
    

    有关详细信息,请参阅检索 WMI 实例

  2. 可以从 CimInstance.CimClass.CimClassQualifiers 检索类限定符,从 CimInstance.CimClass.CimClassProperties 检索属性限定符,从 CimInstance.CimClass.CimClassMethods 检索方法限定符。

    Console.WriteLine("Class: " + myDrive.ToString());
    foreach (CimQualifier qualifier in myDrive.CimClass.CimClassQualifiers)
    {
       Console.WriteLine("     " + qualifier.Name.ToString() + ": " + qualifier.Value.ToString());
    }
    
    foreach (CimPropertyDeclaration property in myDrive.CimClass.CimClassProperties)
    {
       Console.WriteLine(property.Name.ToString());
       foreach (CimQualifier qualifier in property.Qualifiers)
       {
          Console.WriteLine("     " + qualifier.Name.ToString() + ": " + qualifier.Value.ToString());
       }
    }
    
    foreach (CimMethodDeclaration method in myDrive.CimClass.CimClassMethods)
    {
       Console.WriteLine(method.Name.ToString());
       foreach (CimQualifier qualifier in method.Qualifiers)
       {
          Console.WriteLine("     " + qualifier.Name.ToString() + ": " + qualifier.Value.ToString());
       }
    }
    

    有关详细信息,请参阅检索 WMI 实例

可以在 C# 中检索 WMI 对象上的限定符,方法是首先检索对象,然后将限定符作为一个集合进行检查。

注意

System.Management 是用于访问 WMI 的原始 .NET 命名空间;但是,此命名空间中的 API 通常运行较慢,并且相对于其更新式的 Microsoft.Management.Infrastructure 对应项,它们无法缩放。

 

使用 C# 检索限定符 (System.Management)

  1. 使用 ManagementObject 检索要查看其限定符的对象。

    using System.Management;
    ...
    ManagementObject myDisk = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'");
    

    有关详细信息,请参阅检索 WMI 实例

  2. 将限定符放入 QualifierDataCollection 中,并通过 QualifierData 值进行枚举。

    
    QualifierDataCollection myQualifiers = myDisk.Qualifiers;
    foreach (QualifierData qd in myQualifiers)
    {
       Console.WriteLine(qd.Name + ": " + qd.Value);
    }
    Console.ReadLine();
    

    有关详细信息,请参阅检索 WMI 实例

以下过程介绍如何使用 VBScript 检索限定符。

使用 VBScript 检索限定符

  1. 检索要查看其限定符的对象,如以下示例所示:

    Set Process = GetObject("winmgmts:Win32_Process")
    

    检索对象的最常见方法是使用 GetObject 方法。 有关详细信息,请参阅检索 WMI 实例

  2. 通过 SWbemObject.Qualifiers_ 属性访问 对象的限定符,如以下示例所示:

    for each Qualifier in Process.Qualifiers_
        WScript.Echo " " & Qualifier.Name
    next
    

以下代码示例介绍如何访问 Win32_Process 对象上的所有限定符。

On Error Resume Next
Set Process = GetObject("winmgmts:Win32_Process")
WScript.Echo ""
WScript.Echo "Class name is", Process.Path_.Class

'Get the qualifiers
WScript.Echo ""
WScript.Echo "Qualifiers:"
WScript.Echo ""
for each Qualifier in Process.Qualifiers_
    WScript.Echo " " & Qualifier.Name
next

if Err <> 0 Then
    WScript.Echo Err.Description
    Err.Clear
End if

以下过程介绍如何使用 C++ 检索限定符。

使用 C++ 检索限定符

  1. 检索要查看其限定符的对象。

    检索对象的最常见方法是使用对 GetObjectGetObjectAsync 的调用。 有关详细信息,请参阅检索 WMI 类或实例数据

  2. 通过调用 IWbemClassObject::GetPropertyQualifierSetIWbemClassObject::GetMethodQualifierSet 方法检索给定属性的限定符集。

  3. 通过返回的 IWbemQualifierSet 接口访问对象的限定符。