Метод SWbemServices.ExecMethodAsync

Метод ExecMethodAsync объекта SWbemServices выполняет метод, экспортируемый поставщиком метода. Вызов немедленно возвращается клиенту, а входящие параметры перенаправляются соответствующему поставщику, где выполняется метод . Сведения и состояние возвращаются вызывающей объекту через события, доставляемые в приемник, указанный в objWbemSink. Поставщик, а не инструментарий управления Windows (WMI), реализует метод .

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

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

Синтаксис

SWbemServices.ExecMethodAsync( _
  ByVal objWbemSink, _
  ByVal strObjectPath, _
  ByVal strMethodName, _
  [ ByVal objWbemInParams ], _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ], _
  [ ByVal objWbemAsyncContext ] _
)

Параметры

objWbemSink

Обязательный. Создайте объект SWbemSink для получения объектов. Приемник объекта, получающий результат вызова метода. Исходящие параметры отправляются в событие SWbemSink.OnObjectReady предоставленного приемника объекта. Результаты механизма вызова отправляются в событие SWbemSink.OnCompleted предоставленного приемника объекта. Имейте в виду, что SWbemSink.OnCompleted не получает код возврата метода WMI. Однако он получает код возврата фактического механизма обратного вызова и полезен только для проверки того, что вызов произошел или что он завершился сбоем по механическим причинам. Код результата, возвращаемый методом WMI, возвращается в объекте исходящего параметра, предоставленном SWbemSink.OnObjectReady. Если возвращается какой-либо код ошибки, предоставленный объект IWbemObjectSink не используется. Если вызов выполнен успешно, вызывается реализация IWbemObjectSink пользователя, чтобы указать результат операции.

strObjectPath

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

strMethodName

Обязательный. Имя метода, который необходимо выполнить.

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

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

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

Целое число, определяющее поведение вызова. Этот параметр может принимать следующие значения.

wbemFlagSendStatus (128 (0x80))

Вызывает асинхронные вызовы для отправки обновлений состояния в обработчик событий OnProgress для приемника объекта.

wbemFlagDontSendStatus (0 (0x0))

Запрещает асинхронным вызовам отправлять обновления состояния в обработчик событий OnProgress для приемника объектов.

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

Как правило, это не определено. В противном случае это объект SWbemNamedValueSet , элементы которого представляют сведения контекста, которые могут использоваться поставщиком, обслуживающим запрос. Поставщик, поддерживающий или требующий таких сведений, должен документировать имена распознаваемых значений, тип данных значения, допустимые значения и семантику.

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

Объект SWbemNamedValueSet , который возвращается в приемник объекта для определения источника исходного асинхронного вызова. Используйте этот параметр, если выполняете несколько асинхронных вызовов с использованием одного и того же приемника объектов. Чтобы использовать этот параметр, создайте объект SWbemNamedValueSet и используйте метод SWbemNamedValueSet.Add , чтобы добавить значение, определяющее асинхронный вызов, который вы выполняете. Этот объект SWbemNamedValueSet возвращается в приемник объекта, а источник вызова можно извлечь с помощью метода SWbemNamedValueSet.Item . Дополнительные сведения см. в статье Выполнение асинхронного вызова с помощью VBScript.

Возвращаемое значение

Этот метод не возвращает значение. Если вызов выполнен успешно, объект OutParameters , который также является SWbemObject , предоставляется приемнику, указанному в objWbemSink. Возвращенный объект OutParameters содержит выходные параметры и возвращаемое значение для выполняемого метода. Дополнительные сведения см. в разделах Создание объектов InParameters и Анализ объектов OutParameters.

Коды ошибок

После завершения метода ExecMethodAsync объект Err может содержать один из кодов ошибок, перечисленных в следующем списке.

wbemErrFailed — 2147749889 (0x80041001)

Незаданная ошибка.

wbemErrInvalidClass — 2147749904 (0x80041010)

Указанный класс недопустим.

wbemErrInvalidParameter — 2147749896 (0x80041008)

Указанный параметр недопустим.

wbemErrOutOfMemory — 2147749894 (0x80041006)

Недостаточно памяти для завершения операции.

wbemErrInvalidMethod — 2147749934 (0x8004102E)

Запрошенный метод недоступен.

wbemErrAccessDenied — 2147749891 (0x80041003)

Текущий пользователь не был авторизован для выполнения метода .

Комментарии

Если выполняемый метод имеет входные параметры, объект InParameters в параметре objWbemInParam должен совпадать с описанием в разделах Создание объектов InParameters и Анализ объектов OutParameters .

Используйте SWbemServices.ExecMethodAsync в качестве альтернативы прямому доступу для выполнения метода поставщика , если невозможно выполнить метод напрямую. Например, используйте его с языком сценариев, который не поддерживает выходные параметры, т. е. если метод имеет параметры OUT. В противном случае рекомендуется использовать прямой доступ для вызова метода. Дополнительные сведения см. в разделе Управление сведениями о классах и экземплярах.

Для метода SWbemServices.ExecMethodAsync требуется путь к объекту. Если скрипт уже содержит объект SWbemObject , можно вызвать SWbemObject.ExecMethodAsync.

Этот вызов возвращается немедленно. Сведения о состоянии возвращаются вызывающей стороне через обратные вызовы, доставляемые в приемник, указанный в objWbemSink. Чтобы продолжить обработку после завершения вызова, реализуйте подпрограмму для objWbemSink. Событие OnCompleted .

Асинхронный обратный вызов позволяет пользователю, не прошедшему проверку подлинности, предоставлять данные в приемник. Это создает угрозу безопасности для сценариев и приложений. Дополнительные сведения об устранении рисков см. в разделе Настройка безопасности в асинхронном вызове.

Используйте параметр objWbemAsyncContext для проверки источника вызова.

Примеры

В следующем примере кода показан метод ExecMethodAsync . Скрипт создает объект Win32_Process , представляющий процесс, в котором выполняется Блокнот. Здесь показано, как настроить объект InParameters и как получить результаты из объекта OutParameters . Скрипт, отображающий те же операции, выполняемые синхронно, см. в статье SWbemServices.ExecMethod. Пример использования прямого доступа см. в разделе Создание метода в классе Win32_Process. Пример той же операции с использованием SWbemObject см. в разделе SWbemObject.ExecMethodAsync.

' 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 required
' for the Win32_Process.Create method call.
' The oProcess.Methods_("Create") call
' 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"

' Create sink to receive event resulting
' from the ExecMethodAsync call.
set Sink = wscript.CreateObject( _
    "WbemScripting.SWbemSink","Sink_")

' Call SWbemServices.ExecMethodAsync
' with the WMI path Win32_Process.

bDone = false
Services.ExecMethodAsync Sink, _
     "Win32_Process", "Create", oInParams

' Call the Win32_Process.Create method asynchronously.
' Set up a wait so the results of the method
' execution can be returned to 
' the sink subroutines.

while not bDone    
    wscript.sleep 1000  
wend

' Sink subroutines
sub Sink_OnObjectReady(oOutParams, oContext)
    wscript.echo "Sink_OnObjectReady subroutine " _ 
        &VBCR & "ReturnValue = " _
        & oOutParams.ReturnValue &VBCR & _
        "ProcessId = " & oOutParams.ProcessId
end sub

sub Sink_OnCompleted(HResult, LastErrorObj, oContext)
    wscript.echo "Sink_OnCompleted subroutine, hresult = " _
        & hex(HResult)
    bdone = true
end sub

Требования

Требование Значение
Минимальная версия клиента
Windows Vista
Минимальная версия сервера
Windows Server 2008
Заголовок
Wbemdisp.h
Библиотека типов
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

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

SWbemServices

SWbemObject.ExecMethod_

SWbemObject.ExecMethodAsync_

SWbemServices.ExecMethod

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

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