SWbemServices.ExecQuery 方法

SWbemServices物件的ExecQuery方法會執行查詢來擷取物件。 這些物件可透過傳回的 SWbemObjectSet 集合取得。

這個方法會在半同步模式中呼叫。 如需詳細資訊,請參閱 呼叫方法。

如需此語法的說明,請參閱 腳本 API 的檔慣例。

語法

objWbemObjectSet = .ExecQuery( _
  ByVal strQuery, _
  [ ByVal strQueryLanguage ], _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ] _
)

參數

strQuery

必要。 包含查詢文字的字串。 此參數不可為空白。 如需建置 WMI 查詢字串的詳細資訊,請參閱 使用 WQL 查詢和 WQL 參考。

strQueryLanguage [選擇性]

包含要使用的查詢語言的字串。 如果指定,此值必須是 「WQL」。

iFlags [選擇性]

整數,決定查詢的行為,並判斷此呼叫是否立即傳回。 此參數的預設值為 wbemFlagReturnImmediately。 此參數可以接受下列值。

wbemFlagForwardOnly (32 (0x20) )

導致傳回順向列舉值。 順向列舉值通常較傳統列舉值更快,而且使用記憶體比傳統列舉值少,但不允許呼叫 SWbemObject.Clone_。

wbemFlagBidirectional (0 (0x0) )

導致 WMI 保留列舉物件的指標,直到用戶端釋放列舉值為止。

wbemFlagReturnImmediately (16 (0x10) )

導致呼叫立即傳回。

wbemFlagReturnWhenComplete (0 (0x0) )

導致此呼叫封鎖,直到查詢完成為止。 這個旗標會在同步模式中呼叫 方法。

wbemQueryFlagPrototype (2 (0x2) )

用於原型設計。 此旗標會阻止查詢發生,並傳回看起來像一般結果物件的物件。

wbemFlagUseAmendedQualifiers (131072 (0x20000) )

導致 WMI 使用基類定義傳回類別增修條款資料。 如需詳細資訊,請參閱 當地語系化 WMI 類別資訊。

objWbemNamedValueSet [選擇性]

一般而言,這是未定義的。 否則,這是 SWbemNamedValueSet 物件,其元素代表服務要求的提供者可以使用的內容資訊。 支援或需要這類資訊的提供者必須記載已辨識的值名稱、值的資料類型、允許的值和語意。

傳回值

如果沒有發生錯誤,這個方法會傳回 SWbemObjectSet 物件。 這是包含查詢結果集的物件集合。 呼叫端可以使用所使用之程式設計語言的集合實作來檢查集合。 如需詳細資訊,請參閱 存取集合。

錯誤碼

完成 ExecQuery方法之後,Err物件可以包含下列清單中的其中一個錯誤碼。

wbemErrAccessDenied - 2147749891 (0x80041003)

目前使用者沒有檢視結果集的許可權。

wbemErrFailed - 2147749889 (0x80041001)

未指定的錯誤。

wbemErrInvalidParameter - 2147749896 (0x80041008)

指定了不正確參數。

wbemErrInvalidQuery - 2147749911 (0x80041017)

查詢語法無效。

wbemErrInvalidQueryType - 2147749912 (0x80041018)

不支援要求的查詢語言。

wbemErrOutOfMemory - 2147749894 (0x80041006)

記憶體不足,無法完成作業。

備註

ExecQuery 是擷取 WMI 資訊最常使用的呼叫之一。 對 ExecQuery的標準呼叫看起來如下:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service where Name='Alerter'")
For Each objService in colServices
    Return = objService.StopService()
    If Return <> 0 Then
        Wscript.Echo "Failed " &VBNewLine & "Error code = " & Return 
    Else
       WScript.Echo "Succeeded"
    End If
Next

請注意,您會使用代表適當命名空間和安全性的 Moniker 建立 SWbemServices 物件,然後透過服務呼叫 ExecQuery 。 如需更完整的討論,請參閱 建立 WMI 腳本 和 列舉 WMI。

如同 InstancesOf 方法, ExecQuery 方法一律會傳回 SWbemObjectSet 集合。 因此,您的 WMI 腳本必須列舉集合 ExecQuery 傳回,才能存取集合中的每個受控資源實例,如下所示:

strComputer = "."
Set objSWbemServices = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colSWbemObjectSet = objSWbemServices.ExecQuery _
   ("SELECT * FROM Win32_Service")
For Each objSWbemObject In colSWbemObjectSet
    Wscript.Echo "Name: " & objSWbemObject.Name
Next

其他傳回SWbemObjectSet的SWbemServices方法包括AssociatorsOf、ReferencesTo和SubclassesOf。

查詢不是傳回空結果集的錯誤。 ExecQuery方法會傳回索引鍵屬性,不論在 strQuery引數中是否要求索引鍵屬性。 如果在執行此方法時發生錯誤,而且您未使用 wbemFlagReturnImmediately 旗標,則在嘗試存取傳回的物件集之前,不會設定 Err 物件。 不過,如果您使用 wbemFlagReturnWhenComplete 旗標,則會在呼叫 ExecQuery 方法時設定 Err 物件。

WQL 查詢中可以使用 的 AND 和 OR 關鍵字數目有一些限制。 複雜查詢中使用的大量 WQL 關鍵字可能會導致 WMI 將 WBEM_E_QUOTA_VIOLATION 錯誤碼傳回為 HRESULT 值。 WQL 關鍵字的限制取決於查詢的複雜程度。

範例

下列 VBScript 程式碼範例會找出本機電腦上的所有磁片磁碟機,並顯示裝置識別碼和磁片磁碟機的類型。

Set colDisks = GetObject( _
    "Winmgmts:").ExecQuery("Select * from Win32_LogicalDisk")
For Each objDisk in colDisks
 
    Select Case objDisk.DriveType
        Case 1
            Wscript.Echo "No root directory. Drive type could not be determined."
        Case 2
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Removable drive" 
        Case 3
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Local hard disk" 
        Case 4
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Network disk" 
        Case 5
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Compact disk" 
        Case 6
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = RAM disk" 
        Case Else
            Wscript.Echo "Drive type could not be determined."
    End Select
Next

規格需求

需求 值
最低支援的用戶端
Windows Vista
最低支援的伺服器
Windows Server 2008
標頭
Wbemdisp.h
類型程式庫
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

另請參閱

SWbemServices

SWbemServices.Get

使用 WQL 進行查詢

建立 WMI 腳本

列舉 WMI