Método SWbemServices.ExecMethod

El método ExecMethod del objeto SWbemServices ejecuta un método exportado por un proveedor de métodos. Este método se bloquea mientras se ejecuta el método que se reenvía al proveedor adecuado. Posteriormente, se devuelve la información y el estado. El proveedor, en lugar de WMI, implementa el método.

Este método se llama en el modo sincrónico. Para obtener más información, consulte Llamada a un método.

Para obtener una explicación de esta sintaxis, vea Convenciones de documentación para la API de scripting.

Sintaxis

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

Parámetros

strObjectPath

Necesario. Cadena que contiene la ruta de acceso del objeto para el que se ejecuta el método. Para obtener más información, consulte Descripción de la ubicación de un objeto WMI.

strMethodName

Necesario. Nombre del método para el objeto.

objWbemInParams [opcional]

Un objeto SWbemObject que contiene los parámetros de entrada para el método que se está ejecutando. De forma predeterminada, este parámetro no está definido. Para obtener más información, consulte Construir objetos InParameters y analizar objetos OutParameters.

iFlags [opcional]

Reservado. Este valor debe ser cero.

objWbemNamedValueSet [opcional]

Normalmente, esto no está definido. De lo contrario, se trata de un objeto SWbemNamedValueSet cuyos elementos representan la información de contexto que puede usar el proveedor que atiende la solicitud. Un proveedor que admita o necesite esa información debe documentar los nombres de valor reconocidos, el tipo de datos del valor, los valores permitidos y la semántica.

Valor devuelto

Si el método es correcto, se devuelve un objeto SWbemObject. El objeto devuelto contiene los parámetros de salida y el valor devuelto para el método que se está ejecutando.

Códigos de error

Después de completar el método ExecMethod, el objeto Err puede contener uno de los códigos de error de la lista siguiente.

wbemErrFailed - 2147749889 (0x80041001)

Error no especificado.

wbemErrInvalidClass - 2147749904 (0x80041010)

La clase especificada no era válida.

wbemErrInvalidParameter: 2147749896 (0x80041008)

Un parámetro especificado no es válido.

wbemErrOutOfMemory: 2147749894 (0x80041006)

No hay suficiente memoria para completar la operación.

wbemErrInvalidMethod - 2147749934 (0x8004102E)

El método solicitado no estaba disponible.

wbemErrAccessDenied: 2147749891 (0x80041003)

El usuario actual no estaba autorizado para ejecutar el método.

Comentarios

Use SWbemServices.ExecMethod como alternativa al acceso directo para ejecutar un método de proveedor en los casos en los que no es posible ejecutar un método directamente. El método ExecMethod permite obtener parámetros de salida, si el proveedor los proporciona, con un lenguaje de scripting que no admite parámetros de salida. De lo contrario, el medio recomendado para invocar un método es usar el acceso directo. Para obtener más información, consulte Manipular información de clase e instancia.

Por ejemplo, el siguiente ejemplo de código que llama al método del proveedor StartService en Win32_Service usa el acceso directo.

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

En este ejemplo se llama a SWbemServices.ExecMethod para ejecutar el método StartService. Tenga en cuenta que se requiere una ruta de acceso de objeto porque SWbemServices.ExecMethod ya no funciona en el objeto, a diferencia de 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"

El método SWbemServices.ExecMethod requiere una ruta de acceso de objeto. Si el script ya contiene un objeto SWbemObject, use el método SWbemObject.ExecMethod.

Ejemplos

El ejemplo siguiente muestra el método ExecMethod. El script crea un objeto Win32_Process que representa un proceso que ejecuta el Bloc de notas. Muestra la configuración de un objeto InParameters y cómo obtener resultados de un objeto OutParameters. Para ver un script que muestra las mismas operaciones realizadas de forma asincrónica, consulte SWbemServices.ExecMethodAsync. Para obtener un ejemplo de uso del acceso directo, consulte Crear el método de la clase Win32_Process. Para obtener un ejemplo de la misma operación mediante SWbemObject, consulte 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

Requisitos

Requisito Value
Cliente mínimo compatible
Windows Vista
Servidor mínimo compatible
Windows Server 2008
Encabezado
Wbemdisp.h
Biblioteca de tipos
Wbemdisp.tlb
Archivo DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

Consulte también

SWbemServices

SWbemObject.ExecMethod_

Llamar a un método de proveedor

Manipular información de clase e instancia