存取 WMI 限定符
限定符是標記,可提供WMI物件、方法或屬性的詳細資訊。 有時候,您可能需要存取儲存在限定符中的數據。 例如,常見的工作是藉由嘗試擷取該方法的 實作 限定符,判斷提供者是否實作方法。 如需詳細資訊,請參閱 WMI 限定符 和 新增限定符。
您可以在 PowerShell 中擷取 WMI 物件上的限定符,先擷取物件,然後檢查限定符,就像任何其他屬性一樣。
使用 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 實例。
您可以先在 C# 中擷取 WMI 實例物件,然後將其限定符作為集合進行檢查。
使用 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 實例。
您可以從 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)
使用 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")
透過 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 介面存取物件的限定符。