Управление сетями Windows с помощью сценариев (Часть 12)

Published on Февраль 19, 2009 by   ·   Комментариев нет

Давным-давно в третьей статье из этого цикла, мы разработали следующий простой сценарий под названием displayTimeZone.vbs, который позволяет отобразить настройки для текущей временной зоны на вашем компьютере. Сценарий выглядел следующим образом:


Option Explicit
On Error Resume Next
Dim strComputer
Dim strWMINamespace
Dim strWMIQuery
Dim objWMIService
Dim colItems
Dim objItem

strComputer = "."
strWMINamespace = "\root\CIMV2"
strWMIQuery = "SELECT * FROM Win32_TimeZone"

Set objWMIService = GetObject("winmgmts:\\" & strComputer & strWMINamespace)
Set colItems = objWMIService.ExecQuery(strWMIQuery)

For Each objItem In colItems
            WScript.Echo objItem.Caption
Next

Когда я запускал этот сценарий, то получал следующий результат:


C:\scripts>DisplayTimeZone.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

(GMT-06:00) Central Time (US & Canada)

Откуда я узнал, что именно свойство Caption (заголовок) класса Win32_TimeZone class позволяет получить информацию, которую я хочу отобразить? Всю эту информацию мы получили, прочитав описание класса Win32_TimeZone WMI в MSDN. В действительности на этой странице MSDN сообщается, что свойство Description (описание) в действительности позволяет получить ту же самую информацию, что и свойство Caption (заголовок), поэтому я могу изменить строку WScript.Echo objItem.Caption на следующую строку WScript.Echo objItem.Description и получить тот же самый результат.

Что еще мы можем узнать на этой странице MSDN относительно класса Win32_TimeZone class? Что, если я хотел выяснить информацию, касающуюся того, когда будет осуществлен переход на летнее время на этом компьютере? Быстрый просмотр этой страницы приводит меня к такой информации, касающейся свойства DaylightMonth property:


DaylightMonth
Data type: uint32
Access type: Read-only

Месяц, когда происходит переход с зимнего на летнее время в операционной системе.

Value Meaning (Краткие обозначения)
1
0x1 January (январь)
2
0x2 February (февраль)
3
0x3 March (март)
4
0x4 April (апрель)
5
0x5 May (май)
6
0x6 June (июнь)
7
0x7 July (июль)
8
0x8 August (август)
9
0x9 September (сентябрь)
10
0xA October (октябрь)
11
0xB November (ноябрь)
12
0xC December (декабрь)

Чтобы использовать эту информацию, я просто изменю строку WScript.Echo objItem.Caption на строку WScript.Echo objItem.DaylightMonth , а ниже можно увидеть то, что мы получим после выполнения сценария:


C:\scripts>DisplayTimeZone.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

3

Достаточно справедливо, переход на летнее время в этом году был в марте, вместо апреля из-за изменений в законодательстве, принятых правительством (а также принятых затем здесь в Канаде).

Список свойств класса

Теперь мы можем продолжить наш процесс обучения, изменяя свойство <property> для объекта WScript.Echo objItem.<property> и так последовательно изучая одно за другим свойства класса Win32_TimeZone. А может быть есть способ проще? Можно ли увидеть все свойства этого класса с помощью одного сценария, не меняя их в сценарии? Конечно! Но перед тем, как мы сделаем это, давайте сперва попытаемся получить список свойств этого класса. Ниже можно увидеть, как это сделать:


Option Explicit
On Error Resume Next
Dim strComputer
Dim strWMINamespace
Dim strWMIQuery
Dim objWMIService
Dim colItems
Dim objItem

strComputer = "."
strWMINamespace = "\root\CIMV2"
strWMIQuery = ":Win32_TimeZone"

Set objWMIService = GetObject("winmgmts:\\" &amp; strComputer &amp; strWMINamespace &amp; strWMIQuery)
WScript.Echo "Number of properties of " &amp; strWMIQuery &amp; " class is " &amp; objWMIService.Properties_.count

Ниже можно увидеть результат выполнения этого нового сценария, который мы назовем DisplayClassProperties.vbs:


C:\scripts&gt;DisplayClassProperties.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

Number of properties of :Win32_TimeZone class is 24

Обратившись к странице свойств класса Win32_TimeZone в MSDN, мы можем убедиться, что это верно, т.е. класс Win32_TimeZone имеет 24 свойства.

Как работает этот новый класс? Во-первых, обратите внимание, что вместо подключения к пространству имен по умолчанию (default namespace «\root\CIMV2») на локальном компьютере («.»), мы подключаемся напрямую к классу Win32_TimeZone class на компьютере. Другими словами, строку:


Set objWMIService = GetObject("winmgmts:\\" &amp; strComputer &amp; strWMINamespace &amp; strWMIQuery)

можно заменить на строку:


Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2:Win32_TimeZone")

и она сделает те же самые действия. Во-вторых, вы должны обратить внимание, на забавную вещь в последней строке сценария:


objWMIService.Properties_.count

Это странно, не так ли? Мы знаем, о свойствах properties (т.е. <object>.<property>) и методах methods (т.е. <object>.<method>) из первой статьи из этого цикла, но objWMIService.Properties_.count имеет две точки, а не одну. Что же здесь происходит? Давайте снова вернемся к этой строке:


Set objWMIService = GetObject("winmgmts:\\" &amp; strComputer &amp; strWMINamespace &amp; strWMIQuery)

которая, как мы видели эквивалентна этой строке:


Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2:Win32_TimeZone")

Моникер (moniker) в этом предложении WMI winmgmts:\\.\root\CIMV2:Win32_TimeZone и он описывает путь к классу WMI, к которому мы хотим получить доступ, и есил мы используем функцию GetObject для этого моникера (moniker), то она возвращает обхект SwbemObject, который затем присваивается переменной objWMIService с помощью команды Set. (Более точно, функция GetObject возвращает ссылку на объект SwbemObject, предоставляемый компонентом COM)

Итак, другими словами, если выполняется предложение:


Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2:Win32_TimeZone")

То мы получаем объект SWmebObject. Теперь у объекта есть свойства, а какие свойства может иметь объект SWmebObject? Одно из свойств, которое он может иметь, называется Properties_ и использует стандартную условную запись <object><properties>, что значит, что свойство Properties_ объекта SWebmObject можно вызвать таким образом SWbemObject.Properties_ (подчеркивание является часть названия свойства). Более подробно о свойстве SWbemObject.Properties_ объекта SWebmObject вы можете узнать на этой странице MSDN, а на ней говорится, что это свойство представляет собой набор всех свойств класса, или, другими словами, свойство SWbemObject.Properties_ представляет собой массив или коллекцию. А как вы помните, коллекция – это объект такого типа, который содержит несколько элементов (которые могут быть либо объектами либо свойствами, но не методами).

Другими словами, SWbemObject.Properties_ в действительности коллекция (тип объекта), а так как у объектов есть свойства, то у этого объекта также есть свойства. И одно из свойств этого класса называется .count, которое возвращает количество свойств объекта, т.е. <collection>.<count> возвращает количество элементов в этой коллекции. Поэтому SWbemObject.Properties_.count – это свойство .count объекта SWbemObject.Properties_, отсюда и получаются две точки, вместо привычно одной точки в синтаксисе <object>.<property>.

По крайней мере, так я понимаю эту вещь, но, пожалуйста, помните, что я не разработчик—я лишь разбираюсь в том, как работает сценарий!

Отображение свойств класса

Итак, теперь, когда мы может получить список (количество) свойств класса Win32_TimeZone, как мы можем получить названия самих свойств? Путем добавления следующих строк в конце нашего сценария DisplayClassProperties.vbs:


For Each objItem in objWMIService.Properties_
    Wscript.Echo "Property: " &amp; objItem.name
Next

Ниже можно увидеть результат выполнения нашего сценария:


C:\scripts&gt;DisplayClassProperties.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
Number of properties of :Win32_TimeZone class is 24
Property: Bias
Property: Caption
Property: DaylightBias
Property: DaylightDay
Property: DaylightDayOfWeek
Property: DaylightHour
Property: DaylightMillisecond
Property: DaylightMinute
Property: DaylightMonth
Property: DaylightName
Property: DaylightSecond
Property: DaylightYear
Property: Description
Property: SettingID
Property: StandardBias
Property: StandardDay
Property: StandardDayOfWeek
Property: StandardHour
Property: StandardMillisecond
Property: StandardMinute
Property: StandardMonth
Property: StandardName
Property: StandardSecond
Property: StandardYear

Проверив нашу страницу в MSDN, описывающую класс Win32_TimeZone class, мы можем увидеть, что все свойства этого класса благополучно отобразились.

Заключение

Сила такого подхода заключается в том, что он позволяет нам получить список свойств любого класса WMI, чтобы можно было бы его лучше изучить. (Помните, что в третьей статье из этого цикла мы видели, как увидеть список всех классов WMI в пространстве имен, а вооружившись таким списком, мы можем дальше увидеть, чем мы можем управлять с помощью WMI.)

Например, предположим, что мы хотим получить список свойств класса Win32_BootConfiguration WMI class. Чтобы сделать это с помощью нашего сценария DisplayClassProperties.vbs script, все, что нам необходимо, это изменить строку:


strWMIQuery = ":Win32_TimeZone"

на следующую:


strWMIQuery = ":Win32_BootConfiguration"

После этого изменения, мы заново запускаем наш сценарий и получаем следующий результат:


C:\scripts&gt;DisplayClassProperties.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

Number of properties of :Win32_BootConfiguration class is 9
Property: BootDirectory
Property: Caption      
Property: ConfigurationPath    
Property: Description  
Property: LastDrive    
Property: Name  Value:
Property: ScratchDirectory    
Property: SettingID    
Property: TempDirectory

Я советую вам использовать эту статью совместно с третьей статьей из этого цикла для изучения классов WMI и их свойств в своем дальнейшем обучении, а об остальных возможностях при использовании WMI для управления компьютерами Windows мы узнаем в следующих статьях из этого цикла.

www.windowsnetworking.com


Смотрите также:

Tags:

Readers Comments (Комментариев нет)




Да человек я, человек! =)




Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]