Поделиться через


Метод SWbemServices.ExecMethod

Метод ExecMethod объекта SWbemServices выполняет метод, экспортируемый поставщиком метода. Этот метод блокируется, пока выполняется метод, перенаправленный соответствующему поставщику. Затем возвращаются сведения и состояние. Поставщик, а не WMI, реализует метод .

Этот метод вызывается в синхронном режиме. Дополнительные сведения см. в разделе Вызов метода .

Описание этого синтаксиса см. в разделе Соглашения о документах для API сценариев.

Синтаксис

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

Параметры

strObjectPath

Обязательный. Строка, содержащая путь к объекту, для которого выполняется метод. Дополнительные сведения см. в разделе Описание расположения объекта WMI.

strMethodName

Обязательный. Имя метода для объекта .

objWbemInParams [необязательно]

Объект SWbemObject , содержащий входные параметры для выполняемого метода. По умолчанию этот параметр не определен. Дополнительные сведения см. в разделах Создание объектов InParameters и Анализ объектов OutParameters.

iFlags [необязательно]

Зарезервировано. Это значение должно быть равно нулю.

objWbemNamedValueSet [необязательно]

Как правило, это не определено. В противном случае это объект 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 позволяет получить выходные параметры, если поставщик предоставляет их, с помощью языка сценариев, который не поддерживает выходные параметры. В противном случае рекомендуется использовать прямой доступ. Дополнительные сведения см. в разделе Управление сведениями о классах и экземплярах.

Например, в следующем примере кода, который вызывает метод поставщика StartService в Win32_Service использует прямой доступ.

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
Заголовок
Wbemdisp.h
Библиотека типов
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

См. также раздел

SWbemServices

SWbemObject.ExecMethod_

Вызов метода поставщика

Управление сведениями о классе и экземпляре