Поделиться через


Доступ к квалификатору WMI

Квалификатор — это тег, предоставляющий дополнительные сведения об объекте WMI, методе или свойстве. Иногда может потребоваться доступ к данным, хранящимся в квалификаторе. Например, распространенной задачей является определение того, реализует ли поставщик метод с помощью попытки получить квалификатор `«Implemented»` для этого метода. Дополнительные сведения см. в Квалификаторы WMI и Добавление квалификатора.

Вы можете получить квалификаторы в объекте WMI в PowerShell, сначала извлекая объект, а затем проверяя квалификаторы, как и любое другое свойство.

Извлечение параметра с помощью 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.

Вы можете получить квалификаторы экземпляра WMI, используя C#, сначала извлекая объект, а затем анализируя квалификаторы как коллекцию.

Получение квалификатора средствами 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. Вы можете получить квалификаторы класса из CimClass.CimClassQualifiers, квалификаторы свойств из CimClass.CimClassProperties, а также квалификаторы методов из CimInstance.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.

Вы можете получить квалификаторы для объекта WMI в C#, сначала извлекая объект, а затем проверяя квалификаторы как коллекцию.

Заметка

System.Management — исходное пространство имен .NET, используемое для доступа к WMI; однако 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.