Метод 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 |
Заголовок |
|
Библиотека типов |
|
DLL |
|
CLSID |
CLSID_SWbemServices |
IID |
IID_ISWbemServices |