SWbemServices.ExecMethod 方法
SWbemServices 对象的 ExecMethod 方法执行由方法提供程序导出的方法。 此方法在转发到相应提供程序的方法执行时受到阻止。 然后返回信息和状态。 该方法由提供程序实现,而不是 WMI。
此方法在同步模式下调用。 有关详细信息,请参阅调用方法。
有关此语法的说明,请参阅脚本 API 的文档约定。
语法
objOutParams = .ExecMethod( _
ByVal strObjectPath, _
ByVal strMethodName, _
[ ByVal objWbemInParams ], _
[ ByVal iFlags ], _
[ ByVal objWbemNamedValueSet ] _
)
parameters
-
strObjectPath
-
必需。 包含为其执行方法的对象的对象路径的字符串。 有关详细信息,请参阅描述 WMI 对象的位置。
-
strMethodName
-
必需。 对象方法的名称。
-
objWbemInParams [optional]
-
包含所执行方法的输入参数的 SWbemObject 对象。 默认情况下,此参数为未定义。 有关详细信息,请参阅构造 InParameters 对象和分析 OutParameters 对象。
-
iFlags [optional]
-
保留。 此值必须为零。
-
objWbemNamedValueSet [optional]
-
通常,此参数未定义。 如果已定义,此参数是一个 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_Service 中调用 StartService 提供程序方法的代码示例使用直接访问。
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 中创建方法。 有关使用 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 |
标头 |
|
类型库 |
|
DLL |
|
CLSID |
CLSID_SWbemServices |
IID |
IID_ISWbemServices |