- •Утиліти і засоби для роботи з wmi
- •Підключення до wmi
- •Робота з об'єктами sWbemServices і sWbemObject
- •Як дістатися до конкретного об'єкту: мова запитів wql
- •Робота з подіями
- •6.1 Архітектура роботи з подіями в wmi
- •6.2 Типи подій
- •6.3 Запит, реєструючий подію
- •Класи wmi
- •7.1 Класи wmi для роботи з устаткуванням
- •7.2 Класи для роботи з операційною системою
- •Робота із службами
- •Робота з файлами і каталогами
- •Робота з журналом подій Windows
- •Об'єкт операційної системи - Win32_OperatingSystem
- •Робота з Win32_Process : запуск, завершення роботи, моніторинг процесів на комп'ютері
- •Інші класи для роботи з операційною системою
- •7.3 Класи для роботи зі встановленими продуктами
- •Практичне завдання:
Робота з об'єктами 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")
Не дивлячись на те, що властивості і методи методу, що пролягає нижче, не видно з переглядача, вони цілком доступні.
