Método SWbemServices.ExecMethod

O método ExecMethod do objeto SWbemServices executa um método que é exportado por um provedor de métodos. Esse método é bloqueado enquanto o método que é encaminhado para o provedor apropriado é executado. As informações e status são retornados. O provedor, e não o WMI, implementa o método.

Esse método é chamado no modo síncrono. Para obter mais informações, consulte Chamar um método.

Para conferir uma explicação dessa sintaxe, confira Convenções de documentação para API de script.

Sintaxe

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

Parâmetros

strObjectPath

Obrigatórios. Cadeia de caracteres que contém o caminho do objeto para o qual o método será executado. Para obter mais informações, confira Descrever o local de um objeto do WMI.

strMethodName

Obrigatórios. Nome do método para o objeto.

objWbemInParams [opcional]

Um objeto SWbemObject que contém os parâmetros de entrada para o método que está sendo executado. Por padrão, esse parâmetro é indefinido. Para obter mais informações, confira Como construir objetos InParameters e Analisar objetos OutParameters.

iFlags [opcional]

Reservado. Esse valor precisa ser zero.

objWbemNamedValueSet [opcional]

Normalmente, isso é indefinido. Caso contrário, esse será um objeto SWbemNamedValueSet cujos elementos representam as informações de contexto que podem ser usadas pelo provedor que está atendendo à solicitação. Um provedor que dê suporte ou exija essas informações deve documentar os nomes de valor reconhecidos, o tipo de dados do valor, os valores permitidos e a semântica.

Retornar valor

Se o método for bem-sucedido, um objeto SWbemObject será retornado. O objeto retornado contém os parâmetros de saída e o valor retornado para o método que está sendo executado.

Códigos do Erro

Após a conclusão do método ExecMethod, o objeto Err poderá conter um dos códigos de erro na lista a seguir.

wbemErrFailed – 2147749889 (0x80041001)

Erro não especificado.

wbemErrInvalidClass – 2147749904 (0x80041010)

A classe especificada não era válida.

wbemErrInvalidParameter – 2147749896 (0x80041008)

Um parâmetro especificado não é válido.

wbemErrOutOfMemory – 2147749894 (0x80041006)

Não há memória suficiente para concluir a operação.

wbemErrInvalidMethod – 2147749934 (0x8004102E)

O método solicitado não estava disponível.

wbemErrAccessDenied – 2147749891 (0x80041003)

O usuário atual não estava autorizado a executar o método.

Comentários

Use SWbemServices.ExecMethod como uma alternativa ao acesso direto para executar um método de provedor nos casos em que não for possível executar um método diretamente. O método ExecMethod permite que você obtenha parâmetros de saída, se o provedor os fornecer, com uma linguagem de script que não dá suporte a parâmetros de saída. Senão, o meio recomendado para invocar um método será usar o acesso direto. Para obter mais informações, confira Manipular informações de classe e instância.

Por exemplo, o exemplo de código a seguir que chama o método de provedor StartService no Win32_Service usa acesso direto.

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

Este exemplo chama SWbemServices.ExecMethod para executar o método StartService. Observe que um caminho de objeto é necessário porque o SWbemServices.ExecMethod já não está operando no objeto, ao contrário do 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"

O método SWbemServices.ExecMethod requer um caminho de objeto. Se o script já tiver um objeto SWbemObject, use o método SWbemObject.ExecMethod.

Exemplos

O exemplo a seguir mostra o método ExecMethod. O script cria um objeto Win32_Process que representa um processo que está executando o Bloco de notas. Ele mostra a configuração de um objeto InParameters e como obter resultados de um objeto OutParameters. Para ver um script que mostra as mesmas operações executadas de maneira assíncrona, consulte SWbemServices.ExecMethodAsync. Para ver um exemplo de como usar o acesso direto, confira Criar método na classe Win32_Process. Para ver um exemplo da mesma operação usando um SWbemObject, veja 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 Valor
Cliente mínimo com suporte
Windows Vista
Servidor mínimo com suporte
Windows Server 2008
Cabeçalho
Wbemdisp.h
Biblioteca de tipos
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

Confira também

SWbemServices

SWbemObject.ExecMethod_

Chamar um método de provedor

Como manipular informações de classe e instância