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。 _

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

請注意,您會使用表示適當命名空間和安全性的標記來建立 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方法包括 AssociatorsOfReferencesToSubclassesOf

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

WQL 查詢中可使用的 關鍵字數目有一些限制。 複雜查詢中使用的大量 WQL 關鍵字可能會導致 WMI 將 WBEM _ E _ 配額 _ 違規 錯誤碼傳回為 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.tlb。h
類型程式庫
>Wbemdisp.tlb .tlb
DLL
Wbemdisp.dll
CLSID
CLSID _ SWbemServices
IID
IID _ ISWbemServices

另請參閱

SWbemServices

SWbemServices。 Get

使用 WQL 查詢

建立 WMI 腳本

列舉 WMI