logo
SQL2008_Administration

7.4.5. Язык wql: подключаемся к объектам wmi

После подключения к службе WMI в нашем распоряжении имеется объект SwbemServices:

Dim oLocator

Set oLocator = CreateObject("wbemScripting.Swbemlocator")

Dim oServices

Set oServices = oLocator.ConnectServer("LONDON", "root\Microsoft\SqlServer\ComputerManagement")

MsgBox TypeName(oServices)

Подключиться к конкретному объекту WMI, например, службе SQL Server, можно с помощью метода ExecQuery объекта SwbemServices, который выполняет запрос на языке WQL, например:

Dim oCollection

Set oCollection = oServices.ExecQuery("select * from SQLService")

For Each item In oCollection

MsgBox item.ServiceName

Next

WQL (WMI Query Language или SQL for WMI) - это язык, основанный на языке SQL, и позиционируемый Microsoft как ANSI-совместимый.

В WQL предусмотрено три типа запросов:

  1. запросы к данным;

  2. запросы к событиям;

  3. запросы к структуре WMI.

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

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

Например:

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

-- только объекты SQL Server

В результате выполнения запроса нам вернется коллекция SWbemObjectSet с объектами SWbemObject.

Объект SwbemObject:

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

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

Получение информации о свойствах и методах объектов WMI:

Система WMI самодокументируема — т.е., информацию о всех свойствах и методах объектах WMI можно получить не при помощи просмотрщика объектов, а непосредственно из кода скрипта.

Например, чтобы получить информацию о всех свойствах объекта WMI, можно использовать код вида

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, состоящую из объектов SWbemProperty. Важнейшие свойства SWbemProperty таковы:

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