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


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

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

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

Получение квалификатора с помощью PowerShell

  • Извлеките объект, квалификаторы которого требуется просмотреть с помощью Get-WmiObject, а затем получить доступ к квалификаторов через свойство квалификаторов :

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