Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / Программирование для администраторов
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

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 на локальном компьютере, возникнет ошибка.

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 

 
© 2004-2016, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru