勇芳软件工作室.汉化:  Windows Management Instrumentation > Scripting API for WMI > Scripting API Objects > SWbemServices >

ExecMethod Method

Previous pageReturn to chapter overviewNext page

描述

 

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。