SWbemObject.ExecMethodAsync_ メソッド
SWbemObject の ExecMethodAsync_ メソッドは、メソッド プロバイダーがエクスポートするメソッドを非同期的に実行します。 このメソッドは SWbemServices.ExecMethodAsync に似ていますが、実行されるメソッドの オブジェクトに対して直接動作します。 Windows Management Instrumentation (WMI) では、このメソッドは実装されません。 プロバイダーがこのメソッドを実装します。
この構文の詳細については、「スクリプト API のドキュメント規則」を参照してください。
構文
objOutParams = .ExecMethodAsync_( _
ByVal objWbemSink, _
ByVal strMethodName, _
[ ByVal objwbemInParams ], _
[ ByVal iFlags ], _
[ ByVal objwbemNamedValueSet ], _
[ ByVal objWbemAsyncContext ] _
)
パラメーター
-
objWbemSink [in]
-
必須。 これは、メソッド呼び出しの結果を受け取るオブジェクト シンクです。 送信パラメーターは、指定されたオブジェクト シンクの SWbemSink.OnObjectReady イベントに送信されます。 呼び出しメカニズムの結果は、指定されたオブジェクト シンクの SWbemSink.OnCompleted イベントに送信されます。 SWbemSink.OnCompleted は メソッドのリターン コードを受け取らないことに注意してください。 ただし、実際の呼び出し戻しメカニズムのリターン コードは受け取り、呼び出しが発生したかを確認すること、または機械的な理由で失敗したことを確認することにのみ役立ちます。 メソッドから返される結果コードは、SWbemSink.OnObjectReady に指定された送信パラメーター オブジェクトで返されます。 エラー コードが返された場合、指定された IWbemObjectSink オブジェクトは使用されません。 呼び出しが成功した場合は、操作の結果を示すためにユーザーの IWbemObjectSink 実装が呼び出されます。
-
strMethodName [in]
-
必須。 これは、オブジェクトのメソッドの名前です。
-
objwbemInParams [in、省略可能]
-
これは、実行されるメソッドの入力パラメータを含む SWbemObject オブジェクトです。 既定では、このパラメーターは未定義です。 詳細については、「InParameters オブジェクトの構築」および「OutParameters オブジェクトの解析」を参照してください。
-
iFlags [in、省略可能]
-
呼び出しの動作を決定する整数。 このパラメーターには次の値を指定できます。
-
wbemFlagSendStatus (128 (0x80))
-
非同期呼び出しから、オブジェクト シンクの SWbemSink.OnProgress イベント ハンドラーに状態の更新が送信されるようにします。
-
wbemFlagDontSendStatus (0 (0x0))
-
非同期呼び出しで、オブジェクト シンクの OnProgress イベント ハンドラーに状態更新を送信しません。
objwbemNamedValueSet [in、オプション]
通常は未定義です。 そうでない場合、これは SWbemNamedValueSet オブジェクトであり、その要素は、要求を処理しているプロバイダーが使用できるコンテキスト情報を表します。 このような情報をサポートする、または必要とするプロバイダーは、認識された値名、値のデータ型、許可された値、セマンティクスを文書化する必要があります。
objWbemAsyncContext [in, optional]
これは、元の非同期呼び出しのソースを識別するためにオブジェクト シンクに戻る 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 で指定されたシンクに配信されるコールバックを通じて呼び出し元に返されます。 各オブジェクトが到着したときにそれを処理するには、objWbemSink.OnObjectReady イベント サブルーチンを作成します。 すべてのオブジェクトが返されたら、objWbemSink.OnCompleted イベントの実装で最終的な処理を実行できます。
非同期コールバックを使用すると、認証されていないユーザーがシンクにデータを提供できます。 これにより、スクリプトとアプリケーションにセキュリティ リスクが発生します。 リスクを排除するには、半同期通信と同期通信のいずれかを使用します。 詳細については、「メソッドの呼び出し」を参照してください。
実行されるメソッドに入力パラメーターがある場合は、「InParameters オブジェクトの構築」および「OutParameters オブジェクトの解析」の説明に従って、InParameters オブジェクトと objWbemInParam パラメーターを構築する必要があります。
SWbemObject.ExecMethodAsync_ メソッドは、SWbemObject で表されるオブジェクトに、実行するメソッドが含まれていることを前提としています。 SWbemServices.ExecMethodAsync メソッドにはオブジェクト パスが必要です。
例
次の例では、ExecMethodAsync メソッドを示します。 スクリプトは、メモ帳を実行しているプロセスを表す Win32_Process オブジェクトを作成します。 InParameters オブジェクトの設定と、OutParameters オブジェクトから結果を取得する方法を示します。
同期的に実行されたのと同じ操作を示すスクリプトについては、「SWbemObject.ExecMethod」を参照してください。 直接アクセスを使用する例については、「Create Method in Class Win32_Process」を参照してください。 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 |
Header |
|
タイプ ライブラリ |
|
[DLL] |
|
CLSID |
CLSID_SWbemObject |
IID |
IID_ISWbemObject |