描述
SWbemServices对象的ExecMethod方法执行由方法提供者导出的方法。该方法将阻止转发到相应提供程序的方法。然后返回信息和状态。提供者,而不是WMI,实现该方法。
该方法在同步模式下被调用。有关详细信息,请参阅调用方法.
PowerBASIC 语法
METHOD ExecMethod_ ( _ BYVAL strObjectPath AS WSTRING, _ BYVAL strMethodName AS WSTRING, _ OPTIONAL BYVAL objWbemInParameters AS IDispatch, _ OPTIONAL BYVAL iFlags AS LONG, _ OPTIONAL BYVAL objWbemNamedValueSet AS IDispatch _ ) AS ISWbemObject |
参数
strObjectPath
需要。包含执行该方法的对象的对象路径的字符串。有关详细信息,请参阅描述WMI对象的位置.
strMethodName
需要。对象的方法名称。
objWbemInParameters
这是一个SWbemObject对象,其中包含正在执行的方法的输入参数。默认情况下,此参数未定义。有关详细信息,请参阅构造参数对象和解析OutParameters对象.
iFlags
保留。该值必须为零。
objWbemNamedValueSet
通常,它是未定义的。否则,这是一个SWbemNamedValueSet对象,其元素表示正在为请求提供服务的提供商可以使用的上下文信息。支持或要求此类信息的提供者必须记录识别的值名称,值的数据类型,允许的值和语义。
返回值
如果方法成功,则返回SWbemObject对象。返回的对象包含正在执行的方法的out参数和返回值。
OBJRESULT
错误(名称/十进制/十六进制) |
含义 |
wbemErrFailed -2147217407 &H80041001 |
未指定错误 |
wbemErrInvalidClass -2147217392 &H80041010 |
指定的类不存在。 |
wbemErrInvalidParameter -2147217400 &H80041008 |
指定了无效参数。 |
wbemErrOutOfMemory -2147217402 &H80041006 |
没有足够的内存来完成操作。 |
wbemErrInvalidMethod -2147217362 &H8004102E |
请求方法不可用。 |
wbemErrAccessDenied -2147217405 0x80041003 |
当前用户未被授权执行该方法。 |
示例代码
以下示例显示ExecMethod方法。该脚本创建一个表示正在运行记事本的进程的Win32_Process对象。它显示了一个InParameters对象的设置,以及如何从OutParameters对象获取结果。对于显示与异步执行相同操作的脚本,请参阅SWbemServices.ExecMethodAsync.有关使用直接访问的示例,请参阅在Win32_Process类中创建方法.有关使用SWbemObject的相同操作的示例,请参阅SWbemObject.ExecMethod.
'连接到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 _(“Create”).InParameters.SpawnInstance_en
oInParams.CommandLine =“Notepad.exe”
'使用WMI路径Win32_Process调用SWbemServices.ExecMethod
设置oOutParams = _
Services.ExecMethod(“Win32_Process”,“创建”,oInParams)
如果oOutParams.ReturnValue = 0那么
wscript.echo“创建方法执行成功”。
其他
'如果Create方法执行失败,
'返回一个空的OutParameters对象。
If IsNull(oOutParams.ReturnValue)Then
wscript.echo“创建方法无法执行”。
否则
wscript.echo“创建方法执行”_
&“但有错误”_
&“0x”&hex(oOutParams.ReturnValue)
End If
万一
备注
在不可能直接执行方法的情况下,使用SWbemServices.ExecMethod作为执行提供者方法的直接访问的替代方法。ExecMethod方法允许您使用不支持输出参数的脚本语言(如JScript)来获取输出参数(如果提供程序为其提供)。否则,调用方法的推荐方法是使用直接访问。有关详细信息,请参阅操纵类和实例信息.
例如,在Win32_Service中调用StartService提供程序方法的以下代码示例使用直接访问。
oService = GetObject("winmgmts:Win32_Service=Alerter")
iStatus = oService.StartService()
此示例调用SWbemServices.ExecMethod以执行StartService??方法。请注意,与SWbemObject.ExecMethod不同,SWbemServices.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方法。
要求
客户 |
需要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。 |