存取 WMI 限定符

限定符是標記,可提供WMI物件、方法或屬性的詳細資訊。 有時候,您可能需要存取儲存在限定符中的數據。 例如,常見的工作是藉由嘗試擷取該方法的 作限定符,判斷提供者是否實作方法。 如需詳細資訊,請參閱 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. 擷取您要檢視其限定符的物件。

    擷取物件的最常見方式是使用 GetObject GetObjectAsync 的呼叫。 如需詳細資訊,請參閱 擷取 WMI 類別或實例數據

  2. 使用 IWbemClassObject::GetPropertyQualifierSet 或 IWbemClassObject::GetMethodQualifierSet 方法,擷取指定屬性的限定符集。

  3. 透過傳 回的 IWbemQualifierSet 介面存取物件的限定符。