Доступ к квалификатору 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)
Извлеките класс, квалификаторы которого необходимо просмотреть, создав объект 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".
Вы можете получить квалификаторы класса из 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)
Извлеките объект, квалификаторы которого необходимо просмотреть с помощью ManagementObject.
using System.Management; ... ManagementObject myDisk = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'");
Дополнительные сведения см. в получении экземпляра WMI.
Поместите квалификаторы в QualifierDataCollectionи перечислите значения из QualifierData.
QualifierDataCollection myQualifiers = myDisk.Qualifiers; foreach (QualifierData qd in myQualifiers) { Console.WriteLine(qd.Name + ": " + qd.Value); } Console.ReadLine();
Дополнительные сведения см. в Получение экземпляра WMI.
В следующей процедуре описывается, как получить квалификатор с помощью VBScript.
Извлечение квалификатора с помощью VBScript
Получите объект, квалификаторы которого требуется просмотреть, как показано в следующем примере:
Set Process = GetObject("winmgmts:Win32_Process")
Наиболее распространенным способом извлечения объекта является использование метода GetObject. Дополнительные сведения см. в разделе , где описано получение экземпляра WMI.
Доступ к квалификаторам объекта можно получить с помощью свойства 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++
Извлеките объект, квалификаторы которого необходимо просмотреть.
Наиболее распространенным способом извлечения объекта является вызов GetObject или GetObjectAsync. Подробнее смотрите в разделе получение данных класса или экземпляра WMI.
Извлечь набор квалификаторов для данного свойства путем вызова метода IWbemClassObject::GetPropertyQualifierSet или IWbemClassObject::GetMethodQualifierSet методов.
Доступ к квалификаторам объекта через возвращённый интерфейс IWbemQualifierSet.