|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
16.3 Подключение к WMIПодключение к службе WMI из скрипта VBScript, объект SwbemLocator, применение моникера, метод ConnectServer(), имперсонация Первое, что необходимо сделать в скрипте – подключиться к службе WMI на локальном или удаленном компьютере. Подключение можно выполнять двумя разными способами: при помощи объекта SwbemLocator или (более стандартный способ) при помощи так называемого моникера. Первый способ выглядит так: 1) вначале получаем объект SwbemLocator: Dim oLocator Set oLocator = CreateObject("wbemScripting.Swbemlocator") У объекта SwbemLocator – всего лишь одно свойство и один метод – свойство security_ используется для получения ссылки на одноименный вложенный объект, и как можно догадаться, используется для настройки безопасности при подключении (если она отличается от параметров по умолчанию), а метод ConnectServer используется для подключения к службе WMI на локальном или удаленном компьютере. Если вы подключаетесь к службе WMI на локальном компьютере, воспользоваться правами другого пользователя (отличного от текущего) вам не удастся – таковы ограничения службы DCOM. 2) далее вызываем метод ConnectServer, который возвращает нам объект SWbemServices: Dim oServices Set oServices = oLocator.ConnectServer("LONDON", "CIMV2") Если мы собираемся подключиться к пространству имен по умолчанию (настраивается из консоли Computer Management, по умолчанию CIMV2) на локальном компьютере, то вызов метода может выглядеть так: Set oServices = oLocator.ConnectServer() 3) полученный объект SWbemServices можно использовать для выполнения запросов WQL, получения ссылок на объекты WMI и т.п. Второй способ подключения к WMI (практически стандартный) – использование моникера. Моникер – это специальная метка, которая используется для подключения к COM-объектам. При использовании моникера синтаксис получается более коротким и гибким (хотя, возможно, менее понятным). Самый простой способ использования моникера – применение синтаксиса вида Dim oSvc Set oSvc = GetObject("WinMgmts:") В этом случае мы получаем тот же объект SWbemServices с параметрами по умолчанию: то есть подключаемся к пространству имен Root\CIMV2 на локальном компьютере с правами пользователя, от имени которого был запущен скрипт. К сожалению, в PrimalScript подсказок по свойствам и методам мы лишаемся. Если они очень нужны, то можно использовать редактор VBA с синтаксисом вида Dim oSvc As SWbemServices Set oSvc = GetObject("WinMgmts:") В качестве дополнительных параметров при определении моникера можно указать уровень имперсонации (по умолчанию – GetObject("WinMgmts:{impersonationLevel=impersonate}") , означает работу с правами текущего пользователя и региональные настройки подключения. Например, чтобы подключиться с английскими региональными настройками, можно использовать синтаксис вида GetObject("WinMgmts:[Locale = ms_409]") . Далее моникеру можно передать информацию о том, к чему мы подключаемся: 1) имени компьютера 2) пространству имен в нем 3) объекту в этом пространстве имен Например, чтобы подключиться к компьютеру Vancouver, можно использовать синтаксис Set oSvc = GetObject(“WinMgmts://Vancouver”) Чтобы подключиться на нем к пространству имен ROOT\CIMV2 (обычно работа производится только с ним, это же пространство имен выбирается по умолчанию, поэтому обычно пространство имен не указывается), синтаксис может выглядеть так: Set oSvc = GetObject(“WinMgmts://Vancouver/root/cimv2”) А чтобы подключиться на нем к объекту, представляющему систему логических дисков, синтаксис может быть таким: Set oSvc = GetObject(“WinMgmts://Vancouver/root/cimv2:Win32_LogicalDisk”) В принципе, можно подключиться и напрямую к объекту логического диска, например, C:. Синтаксис при этом может выглядеть так: Set oSWbemObject = _ GetObject(“WinMgmts://Vancouver/root/cimv2:Win32_LogicalDisk.DeviceID=’C:’”) Но это уже получается запрос WQL, о которых будет рассказано ниже. Кроме того, возвращается не объект SWbemServices, как в предыдущих случаях, а объект SWbemObject. Не удивляйтесь, если где-нибудь в коде увидите слэши в обратную сторону: синтаксис WMI допускает и то, и другое. Например, код вида Set oSvc = GetObject(“WinMgmts:\\Vancouver”) также вполне допустим. Какой же метод из двух выбирать? Microsoft рекомендует использовать только моникер, аргументируя это тем, что: 1) синтаксис проще; 2) можно возвращать не только объект SWbemServices, но и сразу объект SWbemObject. Все примеры у Microsoft построены только на использовании моникера. Однако при использовании объекта SWbemLocator у нас – свои преимущества: 1) только при использовании этого метода можно подключаться к компьютеру с правами другого пользователя. Требуется это не часто, но иногда все-таки требуется; 2) возможность работы с подсказками в PrimalScript у нас сохраняется. Ну а объект SWbemObject можно получить при помощи всего лишь одного дополнительного шага – вызова метода Get объекта SWbemServices. Еще раз отметим, что подключаться с правами другого пользователя можно только к удаленному компьютеру. Если вы попытаетесь подключиться с новыми правами к службе WMI на локальном компьютере, возникнет ошибка.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||