描述
SWbemServices对象的ExecMethodAsync方法执行由方法提供者导出的方法。该呼叫立即返回到客户端,而入站参数被转发到方法执行的适当的提供者。信息和状态通过传递到在objWbemSink中指定的接收器的事件返回给呼叫者。提供程序,而不是Windows管理规范(WMI),实现该方法。
该方法在异步模式下被调用。有关详细信息,请参阅调用方法.
PowerBASIC 语法
METHOD ExecMethodAsync_ ( _ BYVAL objWbemSink AS IDispatch, _ BYVAL strObjectPath AS WSTRING, _ BYVAL strMethodName AS WSTRING, _ OPTIONAL BYVAL objWbemInParameters AS IDispatch, _ OPTIONAL BYVAL iFlags AS LONG, _ OPTIONAL BYVAL objWbemNamedValueSet AS IDispatch, _ OPTIONAL BYVAL objWbemAsyncContext AS IDispatch _ ) |
参数
objWbemSink
需要。创建一个SWbemSink对象来接收对象。接收方法调用结果的对象宿。出站参数将发送到提供的对象接收器的SWbemSink.OnObjectReady事件。调用机制的结果发送到提供的对象接收器的SWbemSink.OnCompleted事件。请注意SWbemSink.OnCompleted不会收到WMI方法的返回码。然而,它接收到实际的呼叫返回机制的返回码,仅用于验证呼叫发生或由于机械原因失败。从WMI方法返回的结果代码返回给提供给SWbemSink.OnObjectReady的出站参数对象。如果返回任何错误代码,则不使用提供的IWbemObjectSink对象。如果呼叫成功,则会调用用户的IWbemObjectSink实现来指示操作的结果。
strObjectPath
需要。包含执行该方法的对象的对象路径的字符串。有关详细信息,请参阅描述WMI对象的位置.
strMethodName
需要。要执行的方法的名称。
objWbemInParameters
包含所执行方法的输入参数的SWbemObject对象。默认情况下,此参数未定义。有关详细信息,请参阅构造参数对象和解析OutParameters对象.
iFlags
确定呼叫行为的整数。此参数可以接受以下值。
值 |
含义 |
wbemFlagSendStatus 128 &H80 |
导致异步调用将状态更新发送到对象接收器的SWbemSink.OnProgress事件处理程序。 |
wbemFlagDontSendStatus 0 &H0 |
防止异步调用向对象接收器的OnProgress事件处理程序发送状态更新。 |
objWbemNamedValueSet
通常,这是未定义的。否则,这是一个SWbemNamedValueSet对象,其元素表示正在为请求提供服务的提供商可以使用的上下文信息。支持或要求此类信息的提供者必须记录识别的值名称,值的数据类型,允许的值和语义。
objWbemAsyncContext
一个返回到对象宿的SWbemNamedValueSet对象,用于标识原始异步调用的源。如果使用相同的对象接收器进行多个异步调用,请使用此参数。要使用此参数,请创建一个SWbemNamedValueSet对象,并使用SWbemNamedValueSet.Add方法添加一个标识您正在进行的异步调用的值。此SWbemNamedValueSet对象返回到对象接收器,可以使用SWbemNamedValueSet.Item方法提取调用的源。有关详细信息,请参阅用VBScript进行异步调用.
返回值
此方法没有返回值。如果呼叫成功,则OutParameters对象(也是SWbemObject)提供给objWbemSink中指定的接收器。返回的OutParameters对象包含正在执行的方法的输出参数和返回值。有关详细信息,请参阅构造参数对象和解析OutParameters对象.
OBJRESULT
错误(名称/十进制/十六进制) |
含义 |
wbemErrFailed -2147217407 &H80041001 |
未指定错误 |
wbemErrInvalidClass -2147217392 &H80041010 |
指定的类不存在。 |
wbemErrInvalidParameter -2147217400 &H80041008 |
指定了无效参数。 |
wbemErrOutOfMemory -2147217402 &H80041006 |
没有足够的内存来完成操作。 |
wbemErrInvalidMethod -2147217362 &H8004102E |
请求方法不可用。 |
wbemErrAccessDenied -2147217405 0x80041003 |
当前用户未被授权执行该方法。 |
示例代码
以下代码示例显示了ExecMethodAsync方法。该脚本创建一个表示正在运行记事本的进程的Win32_Process对象。它显示了一个InParameters对象的设置,以及如何从OutParameters对象获取结果。对于同步执行相同操作的脚本,请参阅SWbemServices.ExecMethod.有关使用直接访问的示例,请参阅在Win32_Process类中创建方法.有关使用SWbemObject的相同操作的示例,请参阅SWbemObject.ExecMethodAsync.
'连接到WMI。
set Services = getobject(“winmgmts:root \\ cimv2”)
'获取类定义对象
的一个Win32_Process对象。
设置oProcess = Services.Get( “Win32_Process的”)
'创建SWbemMethod.InParameters对象
'来保存所需的输入参数
'为Win32_Process.Create方法调用。
'oProcess.Methods _(“Create”)调用en
'获取定义的类对象
'输入参数正确
'为Win32_Process.Create调用。
'InParameters对象是一个
'SWbemObject对象,所以SWbemObject.SpawnInstance_
可以调用它来创建它。
设置oInParams oProcess.Methods = _( “创建”)。_
InParameters.SpawnInstance_
oInParams.CommandLine =“Notepad.exe”
'创建接收器以接收事件
'从ExecMethodAsync调用。
设置Sink = wscript.CreateObject(_
“WbemScripting.SWbemSink”,“Sink_”)
'调用SWbemServices.ExecMethodAsync
'与WMI路径Win32_Process。
bDone = false
Services.ExecMethodAsync Sink,_
“Win32_Process”,“创建”,oInParams
'异步调用Win32_Process.Create方法。
'设置一个等待所以方法的结果
'执行可以返回到
'接收器子程序。
而不是bDone
wscript.sleep 1000
WEND
'Sink子程序
sub Sink_OnObjectReady(oOutParams,oContext)
wscript.echo“Sink_OnObjectReady子例程”_
&VBCR &“ReturnValue =”_
&oOutParams.ReturnValue &VBCR &_
“ProcessId =”&oOutParams.ProcessId
结束子
sub Sink_OnCompleted(HResult,LastErrorObj,oContext)
wscript.echo“Sink_OnCompleted子程序,hresult =”_
&hex(HResult)
bdone = true
结束子
备注
如果执行的方法具有输入参数,则objWbemInParam参数中的InParameters对象必须与构造参数对象和解析OutParameters对象主题中的描述相同。
当不可能直接执行方法时,使用SWbemServices.ExecMethodAsync作为执行提供者方法的直接访问的替代方法。例如,使用不支持输出参数的脚本语言(如JScript),即如果您的方法具有OUT参数。否则,建议您使用直接访问来调用方法。有关详细信息,请参阅操纵类和实例信息.
SWbemServices.ExecMethodAsync方法需要一个对象路径。如果脚本已经包含SWbemObject对象,则可以调用SWbemObject.ExecMethodAsync.
此通话立即返回。状态信息通过在objWbemSink中指定的传送到汇点的回拨返回给主叫方。要在呼叫完成时继续处理,请执行objWbemSinkOnCompleted事件的子例程。
异步回调允许非验证用户向sink提供数据。这对您的脚本和应用程序造成安全隐患。有关如何消除风险的更多信息,请参阅设置异步调用的安全性.
使用objWbemAsyncContext参数验证通话来源。
要求
客户 |
需要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。 |