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

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


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

9.4.5. Язык WQL: подключение к объектам WMI

Объект SwbemServices, метод ExecQuery, WQL (Windows Query Language), автодокументирование объектов WMI, свойства Properties_ и Methods_

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

Dim oLocator

Set oLocator = CreateObject("wbemScripting.Swbemlocator")

Dim oServices

Set oServices = oLocator.ConnectServer("LONDON", _

    "root\Microsoft\SqlServer\ComputerManagement")

MsgBox TypeName(oServices)

Объект SwbemServices — основная "рабочая лошадка" в объектной модели WMI. Для него предусмотрено множество методов. Однако чаще всего вам нужно выполнить одну задачу — подключиться к конкретному объекту WMI, который, например, представляет службу SQL Server. Это можно сделать разными способами, но самый простой и логичный из них — использовать запрос на языке WQL.

В самом простом варианте применение запроса на языке WQL может выглядеть так:

Dim oCollection

Set oCollection = oServices.ExecQuery("SELECT * FROM SQLService")

For Each item In oCollection

    MsgBox item.ServiceName

Next

Язык WQL основан на языке SQL и позиционируется Microsoft как ANSI-совместимый, хотя, конечно, отличий от обычного SQL в нем очень много. Например, с его помощью нельзя изменять данные — операторов INSERT, UPDATE и DELETE в нем нет.

В WQL можно выполнять три типа запросов:

q      запросы к данным (они будут рассмотрены далее в этом разделе);

q      запросы к событиям (они будут рассмотрены в разд. 9.4.6);

q      запросы к структуре WMI — позволяют получать информацию о структуре классов WMI. В практической работе они используются редко, поэтому рассматриваться здесь не будут.

Общий вариант синтаксиса запроса WQL выглядит так:

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

Например:

SELECT ServiceName, DisplayName FROM SQLService WHERE SQLServiceType='1'

В этом примере ServiceName и DisplayName — это имена свойств, значения которых должны вернуться, SQLService — объект WMI, к которому производится запрос, а WHERE SQLServiceType='1' — это, конечно, фильтр, который позволяет фильтровать возвращаемые объекты. В данном случае будут возвращены только объекты для службы SQL Server (без служб SQL Server Agent, полнотекстового поиска и т. п.).

Как вы видите, все очень похоже на обычный язык SQL. Классы WMI представляют собой аналоги таблиц, экземпляры этих классов — записи в таблицах, свойства — столбцы в таблице.

В результате выполнения этого запроса вам вернется коллекция SwbemObjectSet с объектами SwbemObject. В самой коллекции ничего интересного нет, интересны только свойство Count (количество элементов в коллекции) и метод Item() (который позволяет вернуть нужный элемент). А вот про объекты SwbemObject, которые представляют собой конкретные экземпляры объектов WMI, необходимо рассказать подробнее.

Сразу скажем, что SwbemObject — это не сам конечный объект WMI (т. е. не служба SQL Server в данном примере), а всего лишь оболочка, в которую "одет" этот объект. Например, у объекта SwbemObject для службы SQL Server (представленного конечным объектом SQLService) нет свойств ServiceName, DisplayName и SQLServiceType. Но к этим свойствам вполне можно обращаться, как в нашем примере! Этот момент часто запутывает разработчиков: из кода можно вызывать свойства, которые для этого объекта в подсказке редактора кода не видны. Это связано с тем, что обращения ко всем свойствам и методам, которые не определены для объекта SwbemObect, автоматически переадресовываются к объекту нижнего уровня. Поэтому, например, такой код будет вполне допустим:

Dim oLocator

Set oLocator = CreateObject("wbemScripting.Swbemlocator")

 

Dim oServices

Set oServices = oLocator.ConnectServer("LONDON", _

    "root\Microsoft\SqlServer\ComputerManagement")

 

Dim oCollection

Set oCollection = oServices.ExecQuery("SELECT ServiceName, _

    DisplayName FROM SQLService WHERE SQLServiceType='1'")

 

Dim oSWbemObject

For Each oSWbemObject In oCollection

    MsgBox oSWbemObject.DisplayName

Next

Отметим еще один важный момент, связанный с объектом SwbemObject. При помощи свойства Properties_ этого объекта можно получить информацию о всех свойствах объекта нижнего уровня, а при помощи свойства Methods_ — о всех его методах. Чтобы случайно не перепутать свойства SwbemObject и объекта нижнего уровня, названия всех свойств и методов SwbemObject заканчиваются символом подчеркивание.

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

For Each item In oSWbemObject.Properties_

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

Next

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

For Each item In oSWbemObject.Methods_

    WScript.Echo item.Name

Next

В первом случае свойство Properties_ возвращает нам стандартную коллекцию SwbemPropertySet с обычными свойствами и методами типа Add(), Remove(), Item(), Count, которая состоит из объектов SwbemProperty. Самые важные свойства SwbemProperty такие:

q      Value — значение свойства. Это свойство используется по умолчанию;

q      Name — имя данного свойства;

q      IsArray — работает это свойство с массивом значений или нет;

q      Qualifiers — это свойство позволяет спуститься на уровень ниже и получить ссылку на коллекцию SwbemQualifierSet (коллекцию допустимых значений для этого свойства), если для него такой набор предусмотрен.

Для методов все устроено точно так же: свойство Methods_ возвращает коллекцию SwbemMethodSet, состоящую из объектов SwbemMethod.

 

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

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


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

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