次の方法で共有


SWbemServices.ExecNotificationQueryAsync メソッド

SWbemServices オブジェクトの ExecNotificationQueryAsync メソッドは、イベントを受信するクエリを実行します。 この呼び出しはすぐに返され、結果と状態は、objWbemSink で指定されたシンクに配信されるイベントを介して呼び出し元に返されます。

クエリで指定するイベントには、組み込みの Windows Management Instrumentation (WMI) イベント (__InstanceCreationEventなど)、または外因性イベント (Win32_IP4RouteTableEventRegistryKeyChangeEvent など) を指定できます。 詳細については、「受信するイベントの種類の決定」を参照してください。

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

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

構文

SWbemServices.ExecNotificationQueryAsync( _
  ByVal objWbemSink, _
  ByVal strQuery, _
  [ ByVal strQueryLanguage ], _
  [ ByVal iFlags ], _
  [ ByVal objwbemNamedValueSet ], _
  [ ByVal objWbemAsyncContext ] _
)

パラメーター

objWbemSink

必須。 イベントの通知を非同期的に受信するオブジェクト シンク。 オブジェクトを受信する SWbemSink オブジェクトを作成します。

strQuery

必須。 イベント関連のクエリのテキストを含む文字列。 このパラメータを空白にすることはできません。 WMI クエリ文字列の構築の詳細については、「WQL を使用したクエリ」 および 「WQL」を参照してください。

strQueryLanguage [オプション]

使用するクエリ言語を含む文字列。 指定する場合、この値は "WQL" にする必要があります。

iFlags [オプション]

クエリの動作を決定する整数。 このパラメータには、次の値を設定できます。

wbemFlagSendStatus (128 (0x80))

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

wbemFlagDontSendStatus (0 (0x0))

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

objwbemNamedValueSet [省略可能]

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

objWbemAsyncContext [省略可能]

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

戻り値

このメソッドは値を返しません。 成功した場合、シンクはインスタンスごとに OnObjectReady イベントを受け取ります。 最後のインスタンスの後、オブジェクト シンクは OnCompleted イベントを受け取ります。

エラー コード

ExecNotificationQueryAsync メソッドの完了後に、Err オブジェクトに次のリストのいずれかのエラー コードが含まれる場合があります。

wbemErrAccessDenied - 2147749891 (0x80041003)

現行ユーザーは、結果セットの表示を許可されていません。

wbemErrFailed - 2147749889 (0x80041001)

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

wbemErrInvalidParameter - 2147749896 (0x80041008)

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

wbemErrInvalidQuery - 2147749911 (0x80041017)

クエリ構文が無効です。

wbemErrInvalidQueryType - 2147749912 (0x80041018)

要求されたクエリ言語はサポートされていません。

wbemErrOutOfMemory - 2147749894 (0x80041006)

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

解説

ExecNotificationQueryAsync メソッドは、将来のイベントによって生成されるイベント型オブジェクトを返します。 ExecNotificationQueryAsync が要求するイベント オブジェクトには、組み込み (例: __InstanceCreationEvent) または外因性 (例: RegistryKeyChangeEvent、SNMP イベント) を指定できます。 詳細については、「受信するイベントの種類の決定」を参照してください。

ExecNotificationQueryAsync の呼び出しは直ちに返されます。 要求されたオブジェクトと状態は、objWbemSink で指定されたシンクに配信されるコールバックを通じて呼び出し元に返されます。 各オブジェクトが返されたときにそれを処理するには、objWbemSink.OnObjectReady イベント サブルーチンを作成します。 すべてのオブジェクトが返されたら、最終的な処理を実行して objWbemSink.OnCompleted イベントを実装します。

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

WQL クエリで使用できる AND キーワードと OR キーワードの数には制限があります。 複雑なクエリで使用される WQL キーワードの数が多いと、WMI が WBEM_E_QUOTA_VIOLATION エラー コードを HRESULT 値として返すことがあります。 WQL キーワードの制限は、クエリの複雑さによって異なります。

次の VBScript コード例は、プロセスが終了したことを示す WMI イベント通知を待機しているスクリプトを示しています。 WMI 組み込みイベント (イベント クラス __InstanceDeletionEvent のインスタンス) を待機しています。 __InstanceDeletionEventは、Win32_Processのインスタンスの削除を表す必要があります。 WMI 組み込みイベントの詳細については、「受信するイベントの種類の決定」を参照してください。

次のスクリプトは、コンピューターが再起動されるか、WMI が停止されるか、スクリプトが停止されるまで無期限に実行されます。 スクリプトを手動で停止するには、タスク マネージャーを使用してプロセスを停止します。 プログラムで停止するには、Win32_Process クラスの Terminate メソッドを使用します。

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & _strComputer & "\root\CIMV2") 
Set MySink = WScript.CreateObject("WbemScripting.SWbemSink","SINK_")

objWMIservice.ExecNotificationQueryAsync MySink, "SELECT * FROM __InstanceCreationEvent WITHIN 1 " _
                                               & "WHERE TargetInstance ISA 'Win32_Process'"

WScript.Echo "Waiting for events..."

While (True)
    Wscript.Sleep(1000)
Wend

Sub SINK_OnObjectReady(objObject, objAsyncContext)
    WScript.Echo "Event occurred."
End Sub

Sub SINK_OnCompleted(objObject, objAsyncContext)
    WScript.Echo "Event call complete."
End Sub

要件

要件
サポートされている最小のクライアント
Windows Vista
サポートされている最小のサーバー
Windows Server 2008
Header
Wbemdisp.h
タイプ ライブラリ
Wbemdisp.tlb
[DLL]
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

関連項目

SWbemServices

SWbemServices.ExecQuery

SWbemServices.ExecQueryAsync

システム レジストリ イベントの登録

受信するイベントの種類の決定

メソッドの呼び出し

非同期呼び出しでのセキュリティの設定