SWbemObject.ExecMethodAsync _ 方法

SWbemObjectExecMethodAsync _ 方法會以非同步方式執行方法提供者所匯出的方法。 這個方法類似于 SWbemServices.ExecMethodAsync,但會直接在要執行之方法的物件上運作。 WindowsManagement Instrumentation (WMI) 不會執行此方法。 提供者會執行此方法。

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

語法

objOutParams = .ExecMethodAsync_( _
  ByVal objWbemSink, _
  ByVal strMethodName, _
  [ ByVal objwbemInParams ], _
  [ ByVal iFlags ], _
  [ ByVal objwbemNamedValueSet ], _
  [ ByVal objWbemAsyncContext ] _
)

參數

objWbemSink [在]

必要。 這是接收方法呼叫結果的物件接收。 輸出參數會傳送到所提供之物件接收的 SWbemSink. OnObjectReady 事件。 呼叫機制的結果會傳送到所提供之物件接收的 SWbemSink. OnCompleted 事件。 請注意, SWbemSink OnCompleted 不會收到方法的傳回碼。 但是,它會接收實際呼叫傳回機制的傳回碼,而且只適用于驗證發生的呼叫,或是基於機械原因而失敗。 從方法傳回的結果碼會在提供給 SWbemSink 的輸出參數物件中傳回。 如果有任何錯誤碼傳回,則不會使用提供的 IWbemObjectSink 物件。 如果呼叫成功,則會呼叫使用者的 IWbemObjectSink 執行以指出作業的結果。

strMethodName [在]

必要。 這是物件的方法名稱。

objwbemInParams [在中,選擇性]

這是 SWbemObject 物件,其中包含所執行之方法的輸入參數。 根據預設,這個參數是未定義的。 如需詳細資訊,請參閱 建立 InParameters 物件剖析 OutParameters 物件

iFlags [在中,選擇性]

判斷呼叫行為的整數。 此參數可接受下列值。

wbemFlagSendStatus * * * * (128 (0x80) )

導致非同步呼叫將狀態更新傳送至物件接收的 SWbemSink. OnProgress 事件處理常式。

wbemFlagDontSendStatus * * * (0 (0x0) )

防止非同步呼叫將狀態更新傳送至物件接收的 OnProgress 事件處理常式。

objwbemNamedValueSet [在中,選擇性]

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

objWbemAsyncCoNtext [在中,選擇性]

這是一個 SWbemNamedValueSet 物件,它會返回物件接收以識別原始非同步呼叫的來源。 如果您要使用相同的物件接收進行多個非同步呼叫,請使用此參數。 若要使用此參數,請建立 SWbemNamedValueSet 物件,並使用 SWbemNamedValueSet. add 方法來新增值,以識別您正在進行的非同步呼叫。 這個 SWbemNamedValueSet 物件會傳回物件接收,而呼叫的來源可以使用 SWbemNamedValueSet. Item 方法進行解壓縮。 如需詳細資訊,請參閱 呼叫方法

傳回值

這個方法沒有傳回值。 如果呼叫成功,則會將 OutParameters 物件(也是 SWbemObject 物件)提供給 objWbemSink 中指定的接收。 傳回的 OutParameters 物件包含所執行之方法的輸出參數和傳回值。

錯誤碼

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

wbemErrFailed -2147749889 (0x80041001)

未指定的錯誤。

wbemErrInvalidClass -2147749904 (0x80041010)

指定的類別無效。

wbemErrInvalidParameter -2147749896 (0x80041008)

指定的參數無效。

wbemErrOutOfMemory -2147749894 (0x80041006)

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

wbemErrInvalidMethod -2147749934 (0x8004102E)

要求的方法無法使用。

wbemErrAccessDenied -2147749891 (0x80041003)

目前的使用者未獲授權執行此方法。

備註

當您無法直接執行方法時,請使用 SWbemObject.ExecMethodAsync _ 方法做為直接存取執行 提供者方法的替代方法。 例如,如果您的方法有 out 參數,請使用 SWbemObject.ExecMethodAsync _ 方法搭配不支援輸出參數的指令碼語言。 否則,建議您使用直接存取來叫用方法。 如需詳細資訊,請參閱 操作類別和實例資訊

此呼叫會立即傳回。 要求的物件和狀態會透過回呼傳遞給 objWbemSink 中指定的接收,傳回給呼叫端。 若要在每個物件抵達時進行處理,請建立 objWbemSinkOnObjectReady 事件副程式。 傳回所有物件之後,您就可以在 objWbemSink 的執行中執行最終處理。OnCompleted 事件。

非同步回呼可讓未經驗證的使用者提供資料給接收。 這會對您的腳本和應用程式帶來安全性風險。 若要消除風險,請使用兩個同步通訊或同步通訊。 如需詳細資訊,請參閱 呼叫方法

如果正在執行的方法具有輸入參數,則 InParameters 物件和 objWbemInParam 參數必須依照 建立 InParameters 物件剖析 OutParameters 物件中所述的方式來進行結構化。

SWbemObject.ExecMethodAsync _ 方法會假設 SWbemObject所代表的物件包含要執行的方法。 SWbemServices.Exe的 cMethodAsync方法需要物件路徑。

範例

下列範例顯示 ExecMethodAsync 方法。 腳本會建立 Win32 _ 處理物件,該物件代表正在執行記事本的進程。 它會顯示 InParameters 物件的設定,以及如何從 OutParameters 物件取得結果。

如需顯示同步執行相同作業的腳本,請參閱 SWbemObject.ExecMethod。 如需使用直接存取的範例,請參閱 在 Class Win32 _ 進程中建立方法。 如需使用 SWbemServices 物件進行相同操作的範例,請參閱 SWbemServices.ExecMethodAsync

On Error Resume Next

'Get a Win32_Process class description
Set oProcess = GetObject("winmgmts:Win32_Process")

' Create the SWbemMethod.InParameters object
' to hold the input parameter needed
' for the Win32_Process.Create method call.
' The oProcess.Methods_("Create") call
' obtains a class object that defines
' the correct input parameters
' for the Win32_Process.Create call.
' The InParameters object is an 
' SWbemObject object so SWbemObject.SpawnInstance_
' can be called to create it.
Set oInParams = oProcess.Methods_("Create"). _
    InParameters.SpawnInstance_

' Specify the name of the process to be run.
oInParams.CommandLine = "Notepad.exe"

' Create a sink to receive event resulting
' from the ExecMethodAsync call.
Set Sink = wscript.CreateObject( _
    "WbemScripting.SWbemSink", "Sink_")

' Call the Win32_Process.Create method asynchronously. Set up a 
' wait so the results of the method execution can be returned to 
' the sink subroutines.
bDone = false

' Call SWbemObject.ExecMethodAsync on the oProcess object.
oProcess.ExecMethodAsync_ Sink, "Create", oInParams, 0 
' 
while not bDone
    wscript.sleep 1000
wend

' Sink subroutines
sub Sink_OnObjectReady(oOutParams, oContext)
    wscript.echo "Sink_OnObjectReady subroutine " _
    & VBNewLine & "ReturnValue = " _
    & oOutParams.ReturnValue & VBNewLine & _
    "ProcessId = " & oOutParams.ProcessId
end sub

sub Sink_OnCompleted(HResult, LastErrorObj, oContext)
    wscript.echo "Sink_OnCompleted subroutine, hresult = " _
    & hex(HResult)
    bdone = true
end sub

規格需求

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

另請參閱

SWbemObject

SWbemServices.ExecMethodAsync