SWbemServices.ExecMethodAsync メソッド

SWbemServices オブジェクトの ExecMethodAsync メソッドは、メソッド プロバイダーによってエクスポートされるメソッドを実行します。 呼び出しは、受信パラメーターがメソッドが実行される適切なプロバイダーに転送されている間、すぐにクライアントに戻ります。 情報と状態は、objWbemSink で指定されたシンクに配信されるイベントを通じて呼び出し元に返されます。 プロバイダーでは、Windows Management Instrumentation (WMI) ではなく、メソッドを実装します。

このメソッドは、非同期モードで呼び出されます。 詳細については、メソッドの呼び出しに関するページを参照してください。

詳細とこの構文の説明については、「スクリプト API のドキュメントの表記規則」を参照してください。

構文

SWbemServices.ExecMethodAsync( _
  ByVal objWbemSink, _
  ByVal strObjectPath, _
  ByVal strMethodName, _
  [ ByVal objWbemInParams ], _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ], _
  [ ByVal objWbemAsyncContext ] _
)

パラメーター

objWbemSink

必須。 オブジェクトを受信する SWbemSink オブジェクトを作成します。 メソッド呼び出しの結果を受け取るオブジェクト シンクです。 送信パラメーターは、指定されたオブジェクト シンクの SWbemSink.OnObjectReady イベントに送信されます。 呼び出しメカニズムの結果は、指定されたオブジェクト シンクの SWbemSink.OnCompleted イベントに送信されます。 SWbemSink.OnCompleted は WMI メソッドのリターン コードを受け取らないことに注意してください。 ただし、実際の呼び出し戻しメカニズムのリターン コードは受け取り、呼び出しが発生したかを確認すること、または機械的な理由で失敗したことを確認することにのみ役立ちます。 WMI メソッドから返される結果コードは、SWbemSink.OnObjectReady に指定された送信パラメーター オブジェクトで返されます。 エラー コードが返された場合、指定された IWbemObjectSink オブジェクトは使用されません。 呼び出しが成功した場合は、操作の結果を示すためにユーザーの IWbemObjectSink 実装が呼び出されます。

strObjectPath

必須。 メソッドが実行されるオブジェクトのオブジェクト パスを含む文字列。 詳細については、「WMI オブジェクトの場所を説明する」を参照してください。

strMethodName

必須。 実行するメソッドの名前。

objWbemInParams [オプション]

実行されるメソッドの入力パラメータを含む SWbemObject オブジェクト。 既定では、このパラメータは未定義です。 詳細については、「InParameters オブジェクトの構築と OutParameters オブジェクトの解析」を参照してください。

iFlags [オプション]

呼び出しの動作を決定する整数。 このパラメーターには次の値を指定できます。

wbemFlagSendStatus (128 (0x80))

非同期呼び出しで、オブジェクト シンクの OnProgress イベント ハンドラーに状態更新を送信します。

wbemFlagDontSendStatus (0 (0x0))

非同期呼び出しで、オブジェクト シンクの OnProgress イベント ハンドラーに状態更新を送信しません。

objWbemNamedValueSet [オプション]

通常、これは未定義です。 そうでない場合、これは SWbemNamedValueSet オブジェクトであり、その要素は、要求を処理しているプロバイダーが使用できるコンテキスト情報を表します。 このような情報をサポートする、または必要とするプロバイダーは、認識された値名、値のデータ型、許可された値、セマンティクスを文書化する必要があります。

objWbemAsyncContext [オプション]

SWbemNamedValueSet オブジェクトであり、元の非同期呼び出しのソースを識別するためにオブジェクト シンクに返されます。 同じオブジェクト シンクを使用して複数の非同期呼び出しを行っている場合は、このパラメータを使用します。 このパラメータを使用するには、SWbemNamedValueSet オブジェクトを作成し、SWbemNamedValueSet.Add メソッドを使用して、実行する非同期呼び出しを識別する値を追加します。 この SWbemNamedValueSet オブジェクトはオブジェクト シンクに返され、呼び出しのソースは SWbemNamedValueSet.Item メソッドを使用して抽出できます。 詳細については、「VBScript を使用した非同期呼び出しの実行」を参照してください。

戻り値

このメソッドは値を返しません。 呼び出しが成功すると、OutParameters オブジェクト (SWbemObject でもあります) が、objWbemSink で指定されたシンクに渡されます。 返された OutParameters オブジェクトには、実行中のメソッドの出力パラメーターと戻り値が含まれています。 詳細については、「InParameters オブジェクトの構築と OutParameters オブジェクトの解析」を参照してください。

エラー コード

ExecMethodAsync メソッドの完了後、Err オブジェクトに次の一覧に記載されたいずれかのエラー コードが含まれる場合があります。

wbemErrFailed - 2147749889 (0x80041001)

未定義のエラーが発生しました。

wbemErrInvalidClass - 2147749904 (0x80041010)

指定されたクラスが無効です。

wbemErrInvalidParameter - 2147749896 (0x80041008)

指定されたパラメータが無効です。

wbemErrOutOfMemory - 2147749894 (0x80041006)

操作を完了させるための十分なメモリがありません。

wbemErrInvalidMethod - 2147749934 (0x8004102E)

要求されたメソッドが使用できませんでした。

wbemErrAccessDenied - 2147749891 (0x80041003)

現在のユーザーはメソッドの実行を許可されませんでした。

解説

実行されるメソッドに入力パラメーターがある場合、objWbemInParam パラメーターの InParameters オブジェクトは「InParameters オブジェクトの構築および OutParameters オブジェクトの解析」トピックの説明と同じにする必要があります。

メソッドを直接実行できない場合は、"プロバイダー メソッド" を実行するための直接アクセスの代わりに、SWbemServices.ExecMethodAsync を使用します。 たとえば、出力パラメーターをサポートしていないスクリプト言語 (つまり、メソッドに OUT パラメーターがある場合) で使用します。 それ以外の場合は、直接アクセスを使用してメソッドを呼び出することをお勧めします。 詳細については、「クラスとインスタンスの情報の操作」を参照してください。

SWbemServices.ExecMethodAsync メソッドにはオブジェクト パスが必要です。 スクリプトに既に SWbemObject オブジェクトが含まれている場合は、SWbemObject.ExecMethodAsync を呼び出すことができます。

この呼び出しの結果は直ちに返されます。 状態の情報は、objWbemSink で指定されたシンクに配信されるコールバックを通じて呼び出し元に返されます。 呼び出しが完了したときに処理を続行するには、objWbemSink.OnCompleted イベントのサブルーチンを実装します。

非同期コールバックを使用すると、認証されていないユーザーがシンクにデータを提供できます。 これは、スクリプトとアプリケーションに対するセキュリティ リスクとなります。 これらのリスクを排除する方法の詳細については、「非同期呼び出しでのセキュリティの設定」を参照してください。

objWbemAsyncContext パラメーターを使用して、呼び出しのソースを確認します。

次のコード例では、ExecMethodAsync メソッドを示します。 このスクリプトは、メモ帳を実行しているプロセスを表す Win32_Process オブジェクトを作成します。 InParameters オブジェクトの設定と、OutParameters オブジェクトから結果を取得する方法を示します。 同期的に実行される同じ操作を示すスクリプトについては、SWbemServices.ExecMethod に関する記事を参照してください。 直接アクセスを使用する例については、「Win32_Process クラスの Create メソッド」を参照してください。 SWbemObject を使用した同じ操作の例については、SWbemObject.ExecMethodAsync に関する記事を参照してください。

' Connect to WMI.
set Services = getobject("winmgmts:root\cimv2")

' Obtain the class definition object
' of a Win32_Process object.
Set oProcess = Services.Get("Win32_Process")

' Create the SWbemMethod.InParameters object
' to hold the input parameter required
' 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_
oInParams.CommandLine = "Notepad.exe"

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

' Call SWbemServices.ExecMethodAsync
' with the WMI path Win32_Process.

bDone = false
Services.ExecMethodAsync Sink, _
     "Win32_Process", "Create", oInParams

' 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.

while not bDone    
    wscript.sleep 1000  
wend

' Sink subroutines
sub Sink_OnObjectReady(oOutParams, oContext)
    wscript.echo "Sink_OnObjectReady subroutine " _ 
        &VBCR & "ReturnValue = " _
        & oOutParams.ReturnValue &VBCR & _
        "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
Wbemdisp.h
タイプ ライブラリ
Wbemdisp.tlb
[DLL]
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

関連項目

SWbemServices

SWbemObject.ExecMethod_

SWbemObject.ExecMethodAsync_

SWbemServices.ExecMethod

プロバイダー メソッドの呼び出し

クラスとインスタンスの情報の操作