SWbemServices.ExecMethod 方法

SWbemServices 对象的 ExecMethod 方法执行由方法提供程序导出的方法。 此方法会阻止转发到相应提供程序的方法。 然后返回信息和状态。 提供程序(而不是 WMI)实现该方法。

此方法在同步模式下调用。 有关详细信息,请参阅 调用方法

有关此语法的说明,请参阅 脚本 API 的文档约定

语法

objOutParams = .ExecMethod( _
  ByVal strObjectPath, _
  ByVal strMethodName, _
  [ ByVal objWbemInParams ], _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ] _
)

parameters

strObjectPath

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

strMethodName

必需。 对象的方法的名称。

objWbemInParams [可选]

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

iFlags [可选]

保留。 此值必须为零。

objWbemNamedValueSet [可选]

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

返回值

如果方法成功,则返回 SWbemObject 对象。 返回的对象包含要执行的方法的 out 参数和返回值。

错误代码

完成 ExecMethod 方法后,Err 对象可能包含以下列表中的错误代码之一。

wbemErrFailed - 2147749889 (0x80041001)

错误。

wbemErrInvalidClass - 2147749904 (0x80041010)

指定的类无效。

wbemErrInvalidParameter - 2147749896 (0x80041008)

指定的参数无效。

wbemErrOutOfMemory - 2147749894 (0x80041006)

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

wbemErrInvalidMethod - 2147749934 (0x8004102E)

请求的方法不可用。

wbemErrAccessDenied - 2147749891 (0x80041003)

当前用户无权执行该方法。

注解

在无法直接执行方法的情况下,使用 SWbemServices.ExecMethod 作为直接访问来执行 提供程序方法 的替代方法。 ExecMethod 方法允许你获取输出参数(如果提供程序提供它们)以及不支持输出参数的脚本语言。 否则,调用方法的建议方法是使用直接访问。 有关详细信息,请参阅 操作类和实例信息

例如,以下调用 Win32_ServiceStartService 提供程序方法的代码示例使用直接访问。

oService = GetObject("winmgmts:Win32_Service=Alerter")
iStatus = oService.StartService()

此示例调用 SWbemServices.ExecMethod 来执行 StartService 方法。 请注意,对象路径是必需的,因为 SWbemServices.ExecMethod 尚未在对象上运行,与 SWbemObject.ExecMethod 不同。

Set WbemServices = GetObject("winmgmts:")
Set oService = GetObject("winmgmts:Win32_Service='Alerter'")
Set oPath = GetObject("winmgmts:Win32_Service='Alerter'").Path_
WbemServices.ExecMethod oPath, "StartService"

SWbemServices.ExecMethod 方法需要对象路径。 如果脚本已保存 SWbemObject 对象,请使用 SWbemObject.ExecMethod 方法。

示例

下面的示例演示 ExecMethod 方法。 该脚本创建一个Win32_Process对象,该对象表示运行记事本的进程。 它显示 InParameters 对象的设置以及如何从 OutParameters 对象获取结果。 有关显示异步执行的相同操作的脚本,请参阅 SWbemServices.ExecMethodAsync。 有关使用直接访问的示例,请参阅 类Win32_Process中的 Create 方法。 有关使用 SWbemObject 的相同操作的示例,请参阅 SWbemObject.ExecMethod

' 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 needed
' for the Win32_Process.Create method call.
' The oProcess.Methods_("Create") call
' obtains 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"

'Call SWbemServices.ExecMethod with the WMI path Win32_Process
Set oOutParams = _
    Services.ExecMethod( "Win32_Process", "Create", oInParams)

If oOutParams.ReturnValue = 0 Then
    wscript.echo "Create method executed successfully."
Else
' If the Create method failed to execute,
' an empty OutParameters object is returned. 
    If IsNull(oOutParams.ReturnValue) Then
        wscript.echo "Create method failed to execute."  
    Else
        wscript.echo "Create method executed" _
            & " but had error " _
            & "0x" & hex(oOutParams.ReturnValue)
    End If
End If

要求

要求
最低受支持的客户端
Windows Vista
最低受支持的服务器
Windows Server 2008
标头
Wbemdisp.h
类型库
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

另请参阅

SWbemServices

SWbemObject.ExecMethod_

调用提供程序方法

操作类和实例信息