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

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


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

16.4 Работа с объектами SWbemServices и SWbemObject

Объекты SWbemServices и SWbemObject в скриптах WMI на VBScript, методы Get(), ExecQuery(), ExecNotificationQuery(), самодокументирование объектов WMI, свойства Properties_ и Method_

После того, как вы успешно подключились к службе WMI на локальном или удаленном компьютере (при помощи SWbemLocator или моникера), вам возвращается ссылка на объект SWbemServices:

Dim oLocator

Set oLocator = CreateObject("wbemScripting.Swbemlocator")

Dim oSvc

Set oSvc = oLocator.ConnectServer()

MsgBox TypeName(oSvc)

Этот объект – основная «рабочая лошадка» WMI. Для него предусмотрено всего одно свойство (уже знакомое нам Security_) и 18 методов. Ниже приведены только наиболее часто используемые, по остальным можно получить информацию при помощи WMI SDK.

  • AssociatorsOf - этот метод позволяет получить коллекцию объектов, ассоциированных с указанным вами. Вместо него можно воспользоваться командой WQL ASSOCIATORS OF
  • ExecMethod - выполнить метод объекта WMI
  • ExecNotificationQuery - выполнить запрос для получения событий
  • ExecQuery - выполнить запрос WQL (обычно для получения коллекции объектов)
  • Get - получить ссылку на указанный вами объект WMI
  • InstancesOf - получить коллекцию всех экземпляров указанного вами класса
  • SubclassesOf - получить коллекцию подклассов указанного вами класса.

Для многих методов предусмотрен также вариант Async - асинхронное выполнение данного метода.

В практической работе чаще всего нам потребуется получить ссылку на нужный объект WMI при помощи метода Get или воспользоваться одним из методов Exec... Про эти методы будет рассказано ниже, а пока скажем, что метод Get возвращает ссылку на объект SWbemObject, представляющий указанный вами объект WMI. Синтаксис может быть таким:

Dim oWbemObj

Set oWbemObj = oSvc.Get("Win32_LogicalDisk.DeviceID='C:'")

Сразу скажем, что SWbemObject - это не сам нижележащий объект WMI, а всего лишь оболочка, в которую одет этот объект. Например, у полученного нами объекта SWbemObject нет ни свойства FreeSpace, ни свойства FileSystem, ни свойства VolumeName. Зато при помощи свойства Properties_ этого объекта мы может получить информацию о всех свойствах нижележащего объекта, а при помощи свойства Methods_ - о всех методах. Чтобы случайно не перепутать свойства SWbemObject и нижележащего объекта, названия всех свойств и методов SWbemObject заканчиваются на подчеркивание.

Система WMI изначально построена так, чтобы она была в определенной степени самодокументируемой - например, чтобы информацию о всех свойствах и методах объектах WMI можно было получить не при помощи просмотрщика объектов, а просто из кода скрипта. Например, чтобы получить информацию о всех свойствах объекта WMI, представляющего диск "C:", можно использовать код вида

For Each item In oWbemObj.Properties_

WScript.Echo item.Name & vbTab & item.Value

Next

а для получения информации о методах - такую же конструкцию.

For Each item In oWbemObj.Methods_

WScript.Echo item.Name

Next

В первом случае свойство Properties возвращает нам стандартную коллекцию SWbemPropertySet с обычными свойствами и методами типа Add, Remove, Item, Count, которая состоит из объектов SWbemProperty. Важнейшие свойства SWbemProperty таковы:

  • Value - значение реального свойства. Это свойство используется по умолчанию;
  • Name - комментариев не требует;
  • IsAиrray - работает ли это свойство с массивом значений или нет;
  • Qualifiers - позволяет копнуть на уровень глубже и получить ссылку на коллекцию SWbemQualifierSet, коллекцию допустимых значений для этого свойства (если для него такой набор предусмотрен).

Для методов все устроено точно также: свойство Methods_возвращает коллекцию SWbemMethodSet, состоящую из объектов SWbemMethod. Важнейшие свойства этого объекта - Name, Qualifiers, InParameters, OutParameters.

Создатели WMI настоятельно рекомендуют работать с объектами WMI через их оболочку - SWbemObject. Например, чтобы получить информацию о значении свойства Freespace для нашего диска C:, можно использовать синтаксис вида

For Each item In oWbemObj.Properties_

If item.Name = "FreeSpace" Then MsgBox item.value/1024/1024

Next

а чтобы поменять значение свойства, можно воспользоваться кодом вида:

For Each item In oWbemObj.Properties_

If item.name = "VolumeName" Then item.value = "System"

Next

oWbemObj.put_

Вызов метода put_ здесь обязателен, иначе значение изменится только в оперативной памяти, а не на компьютере.

Для вызова метода объекта WMI рекомендуется воспользоваться методом ExecMethod_:

    Set process = GetObject("winmgmts:{impersonationLevel=impersonate}!Win32_Process")

    Set method = process.Methods_("Create")

    Set inParam = method.inParameters.SpawnInstance_()

    inParam.CommandLine = "calc.exe"

    Set outParam = process.ExecMethod_("Create", inParam)

Здесь мы вызываем метод Create объекта process (типа SWbemObject) и передаем ему параметр CommandLine. Параметр - тот же самый объект SWbemObject, который создается немного причудливым способом - через коллекцию inParameters.

Несмотря на рекомендации Microsoft, большинство разработчиков обращаются к свойствам и методов объектов WMI не через коллекции Properиties_ и Methods_ объекта SWbemObject, а напрямую. Для этого используется тот же самый SWbemObject. Синтаксис обращения к свойству при этом может выглядеть так:

MsgBox oWbemObj.VolumeName   

а синтаксис вызова метода:

Dim oLocator

Set oLocator = CreateObject("wbemScripting.Swbemlocator")

Dim oSvc

Set oSvc = oLocator.ConnectServer()

Dim oWbemObj

Set oWbemObj = oSvc.Get("Win32_Process")

oWbemObj.Create ("calc.exe")

Несмотря на то, что свойства и методы нижележащего метода не видны из просмотрщика, они вполне доступны.

 

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

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


 

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

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