Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_drsp_09.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
207.87 Кб
Скачать
  1. Робота з об'єктами sWbemServices і sWbemObject

Після того, як ви успішно підключилися до служби 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 - коментарів не вимагає;

  • IsArray - чи працює ця властивість з масивом значень або ні;

  • 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("Win 32_Process")

oWbemObj.Create ("calc.exe")

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]