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 ] _
)

parameters

ObjWbemSink

必需。 创建 SWbemSink 对象来接收对象。 接收方法调用结果的对象接收器。 出站参数将发送到提供的对象接收器的 SWbemSink.OnObjectReady 事件。 调用机制的结果将发送到提供的对象接收器的 SWbemSink.OnCompleted 事件。 请注意,SWbemSink.OnCompleted 不接收 WMI 方法的返回代码。 但是,它接收实际调用返回机制的返回代码,并且仅用于验证调用是否发生,或者调用是否由于机制原因而失败。 从 WMI 方法返回的结果代码在提供给 SWbemSink.OnObjectReady 的出站参数对象中返回。 如果返回了任何错误代码,则不会使用提供的 IWbemObjectSink 对象。 如果调用成功,则会调用用户的 IWbemObjectSink 实现以指示操作结果。

strObjectPath

必需。 一个字符串,包含为其执行此方法的对象的对象路径。 有关详细信息,请参阅描述 WMI 对象的位置

strMethodName

必需。 要执行的方法的名称。

objWbemInParams [optional]

包含所执行方法的输入参数的 SWbemObject 对象。 默认情况下,此参数为未定义。 有关详细信息,请参阅构造 InParameters 对象和分析 OutParameters 对象

iFlags [optional]

决定调用行为的整数。 此参数可以接受以下值。

wbemFlagSendStatus (128 (0x80))

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

wbemFlagDontSendStatus (0 (0x0))

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

objWbemNamedValueSet [optional]

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

objWbemAsyncContext [optional]

一个 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 中创建方法。 有关使用 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
标头
Wbemdisp.h
类型库
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

另请参阅

SWbemServices

SWbemObject.ExecMethod_

SWbemObject.ExecMethodAsync_

SWbemServices.ExecMethod

调用提供程序方法

操作类和实例信息