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

Основна функціональність WMI знаходиться у властивостях і методах об'єктів цієї бібліотеки. Як працювати з властивостями і методами цих об'єктів, ми вже поговорили, тепер - про те, як можна знайти потрібний об'єкт.

Найпростіший варіант - отримати колекцію усіх об'єктів певного класу. Для цієї мети можна використовувати метод InstancesOf об'єкту SWbemServices. Цей метод завжди повертає колекцію, навіть якщо вона складається тільки з одного об'єкту. Для того, щоб дістати доступ до елементів цієї колекції, найпростіше використовувати давно знайому нам конструкцію For .. Each :

Dim oLocator

Set oLocator = CreateObject("wbemScripting.Swbemlocator")

Dim oSvc

Set oSvc = oLocator.ConnectServer()

Dim oCol

Set oCol = oSvc.InstancesOf("win 32_product")

For Each item In oCol

WScript.Echo item.Name

Next

Відфільтрувати потрібний об'єкт можна, наприклад, так:

Dim oCol

Dim oProductOffice

Set oCol = oSvc.InstancesOf("win 32_product")

For Each item In oCol

If (InStr(item.name, "Microsoft Office")<> 0) Then

Set oProductOffice = Item

End If

Next

MsgBox oProductOffice.Name

Проте, звичайно, з точки зору продуктивності такий підхід важко визнати найправильнішим. Нам доводиться поміщати посилання на усі встановлені продукти в колекцію і перебирати її, щоб знайти потрібний. Набагато зручніше скористатися вбудованим в WMI мовою запитів - WQL (WMI QueryLanguage, інша назва - SQL for WMI). Ця мова позиціонується як ANSI SQL -совместимый, хоча обмежень у нього дуже багато (наприклад, за допомогою його не можна змінювати дані - операторів INSERT, UPDATE, DELETE в нім не передбачено).

У WQL передбачено три типи запитів :

1) запити до даних - вони будуть розглянуті нижче

2) запити до подій - вони будуть розглянуті в наступному розділі

3) запити до структури WMI - вони дозволяють інформацію про структуру класів WMI. У практичній роботі використовуються нечасто і тому розглядатися тут не будуть.

Загальний синтаксис запиту WQL виглядає так:

SELECT властивості FROM ім'я_класу WHERE властивість оператор значення

Якщо використовувати запит WQL в нашому прикладі для отримання інформації про встановлені продукти, то в найпростішому варіанті він може виглядати так:

Dim oCol

Set oCol = oSvc.ExecQuery("select * from Win32_Product")

For Each item In oCol

WScript.Echo item.Name

Next

Якщо ми, як в звичайному SQL, вкажемо тільки потрібні нам стовпці, повернеться та ж колекція вже знайомих нам об'єктів SWbemObject, але тільки з вказаними нами властивостями плюс властивість, яка визначена як ключове. У прикладі нижче повернеться явно вказана нами властивість Version і ключова властивість Name. Якщо спробуємо звернутися ще і до властивості InstallState, виникне помилка:

Dim oCol

Set oCol = oSvc.ExecQuery("select version from Win32_Product")

For Each item In oCol

Wscript.Echo item.Version

WScript.Echo item.Name

WScript.Echo TypeName(item)

Next

Вираження FROM в WQL -запросе - це, звичайно, ім'я класу, колекцію екземплярів якого ми хочемо отримати. Про доступних в WMI класах буде розказано нижче.

Вираження WHERE визначає фільтр в запиті - таким чином ми залишаємо в колекції тільки ті об'єкти, які нам потрібні, :

Dim oCol

Set oCol = oSvc.ExecQuery("select * from Win32_Product WHERE description = _

'' Microsoft Office - професійний випуск версії 2003'")

For Each item In oCol

WScript.Echo item.Name

Next

Із застосуванням фільтру WHERE пов'язані деякі особливості, які необхідно враховувати, :

  • за умовчанням в колекцію-результат запиту потрапляють усі екземпляри вказаного вами класу разом з їх підкласами. Якщо підкласи вам не потрібні, то фільтр WHERE може виглядати так:

SELECT * FROM CIM_MediaAccessDevice WHERE __CLASS = _ 'Win32_CDROMDrive'

Зверніть увагу, що перед словом __CLASS коштує подвійне підкреслення.

  • у фільтрі WHERE використовуються стандартні оператори SQL : =, <, >, <>, <=, >=. У операторів IS і IS NOT - спеціальне призначення: вони використовуються тільки для порівняння значення властивості з NULL:

SELECT * FROM Win32_Fan WHERE Description IS Null

Є ще спеціальний оператор ISA, який використовується для перевірки значень властивостей вкладених класів. На жаль, оператор LIKE в WQL не використовується.

Запити WQL дуже зручно тестувати з CIM Studio з постачання WMI SDK.

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