勇芳软件工作室.汉化:  Windows Management Instrumentation > Scripting API for WMI > Scripting API Objects > SWbemServices >

ExecNotificationQueryAsync Method

Previous pageReturn to chapter overviewNext page

描述

 

SWbemServices对象的ExecNotificationQueryAsync方法执行一个查询以接收事件。此调用立即返回,结果和状态将通过传递到objWbemSink中指定的汇点的事件返回给调用者。

 

查询中指定的事件可以是内部Windows Management Instrumentation(WMI)事件,例如__InstanceCreationEvent或外部事件,例如Win32_IP4RouteTableEventRegistryKeyChangeEvent.有关详细信息,请参阅确定要接收的事件类型.

 

该方法在异步模式下被调用。有关详细信息,请参阅调用方法.

 

PowerBASIC 语法

 

METHOD ExecNotificationQueryAsync ( _

BYVAL objWbemSink AS IDispatch, _

BYVAL strQuery AS WSTRING, _

OPTIONAL BYVAL strQueryLanguage AS WSTRING, _

OPTIONAL BYVAL iFlags AS LONG, _

OPTIONAL BYVAL objWbemNamedValueSet AS IDispatch, _

OPTIONAL BYVAL objWbemAsyncContext AS IDispatch _

)

 

参数

 

objWbemSink

 

需要。以异步方式接收事件通知的对象接收器。创建一个SWbemSink对象来接收对象。

 

strQuery

 

需要。包含事件相关查询文本的字符串。此参数不能为空。

 

strQueryLanguage

 

包含要使用的查询语言的字符串。如果指定,此值必须为“WQL”。

 

iFlags

 

确定查询行为的整数。该参数可以设置为以下值。

 

含义

wbemFlagSendStatus

128

&H80

导致异步调用将状态更新发送到对象接收器的OnProgress事件处理程序。

wbemFlagDontSendStatus

0

&H0

防止异步调用向对象接收器的OnProgress事件处理程序发送状态更新。

 

objWbemNamedValueSet

 

通常,这是未定义的。否则,这是一个SWbemNamedValueSet对象,其元素表示服务请求的提供者可以使用的上下文信息。支持或要求此类信息的提供者必须记录识别的值名称,值的数据类型,允许的值和语义。

 

objWbemAsyncContext

 

这是一个SWbemNamedValueSet对象,返回到对象接收器,以标识原始异步调用的源。使用此参数可以使用相同的对象接收器进行多个异步调用。要使用此参数,请创建一个SWbemNamedValueSet对象,并使用SWbemNamedValueSet.Add方法添加一个标识您正在进行的异步调用的值。SWbemNamedValueSet对象返回到对象接收器,可以使用SWbemNamedValueSet.Item方法提取调用的源。有关详细信息,请参阅调用方法.

 

返回值

 

此方法没有返回值。如果成功,则接收器每个实例收到OnObjectReady事件。在最后一个实例之后,对象接收器接收OnCompleted事件。

 

OBJRESULT

 

错误(名称/十进制/十六进制)

含义

wbemErrAccessDenied

-2147217405

&H80041003

当前用户无权查看结果集。

wbemErrFailed

-2147217407

&H80041001

未指定错误

wbemErrInvalidParameter

-2147217400

&H80041008

指定了无效参数。

wbemErrInvalidQuery

-2147217385

&H80041017

查询语法无效。

wbemErrInvalidQueryType

-2147217384

&H80041018

不支持请求的查询语言。

wbemErrOutOfMemory

-2147217402

&H80041006

没有足够的内存来完成操作。

 

示例代码[VBScript]

 

以下VBScript代码示例显示正在等待指示进程已终止的WMI事件通知的脚本。它正在等待一个WMI内在事件,事件类__InstanceDeletionEvent的一个实例。__InstanceDeletionEvent必须表示删除Win32_Process的实例。有关WMI内部事件的更多信息,请参阅确定要接收的事件的类型。

 

以下脚本无限期运行,直到计算机重新启动,WMI停止或脚本停止。要手动停止脚本,请使用任务管理器来停止进程。要以编程方式停止,请使用Win32_Process类中的终止方法。

 

strComputer =“。”

设置objWMIService = GetObject(“winmgmts:\\\\”&_

 strComputer &“\\ root \\ CIMV2”)

设置MySink = WScript.CreateObject(_

 “WbemScripting.SWbemSink”,“SINK_”)

 

objWMIservice.ExecNotificationQueryAsync MySink,_

 “SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE”_

 &“TargetInstance ISA”Win32_Process'“

 

WScript.Echo“等待事件...”

 

虽然(真)

(989796001)Wscript.Sleep(1000)

蜿蜒

 

Sub SINK_OnObjectReady(objObject,objAsyncContext)

 WScript.Echo“事件发生。”

结束子

 

Sub SINK_OnCompleted(objObject,objAsyncContext)

 WScript.Echo“事件调用完成”。

结束子

 

备注

 

ExecNotificationQueryAsync方法返回未来事件生成的事件类型对象。ExecNotificationQueryAsync请求的事件可以是内在的(例如__InstanceCreationEvent)或外部的(例如RegistryKeyChangeEvent或SNMP事件)。有关详细信息,请参阅确定要接收的事件类型.

 

致电ExecNotificationQueryAsync将立即返回。所请求的对象和状态通过发送到objWbemSink中指定的接收器的回调返回给呼叫者。要处理每个对象返回时,创建一个OnObjectReadyOnObjectReady事件子例程。返回所有对象后,执行最终处理以实现objWbemSink.OnCompleted事件。

 

异步回调允许非验证用户向sink提供数据。这对您的脚本和应用程序造成安全隐患。要消除风险,请参阅设置异步调用的安全性.

 

对于可在WQL查询中使用的ANDOR关键字的数量有限制。在复杂查询中使用的大量WQL关键字可能导致WMI返回作为HRESULT值的WBEM_E_QUOTA_VIOLATION错误代码。WQL关键字的限制取决于查询的复杂程度。

 

要求

 

客户

需要Windows Vista,Windows XP,Windows 2000 Professional,Windows NT Workstation 4.0 SP4及更高版本,Windows Me,Windows 98或Windows 95 OSR2及更高版本。

服务器

需要Windows Server 2008,Windows Server 2003,Windows 2000 Server或Windows NT Server 4.0 SP4及更高版本。

类型库

使用Wbemdisp.tlb。

Wbemdisp.inc。

DLL

需要Wbemdisp.dll。