Sunday, November 19th, 2017

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

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

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


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

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

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

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

Когда я запустил этот сценарий (используя для этого права локального администратора!) на моей рабочей станции, которая работает под управлением операционной системы Windows XP (при этом в качестве механизма для сценариев по умолчанию Windows script host выбран Cscript.exe) я получил следующий результат:


C:\scripts>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
Property: ScratchDirectory
Property: SettingID
Property: TempDirectory

В последней статье я также упоминал, что этот сценарий можно легко изменить таким образом, чтобы он отображал названия свойств любого другого класса WMI. Например, предположим, что мы хотим отобразить названия всех свойств для класса Win32_DiskPartition class. Для этого нам нужно лишь изменить одну строку в сценарии:


strWMIQuery = ":Win32_BootConfiguration"

на такую:


strWMIQuery = ":Win32_DiskPartition"

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


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

Number of properties of :Win32_DiskPartition class is 34
Property: Access
Property: Availability
Property: BlockSize
Property: Bootable
Property: BootPartition
Property: Caption
Property: ConfigManagerErrorCode
Property: ConfigManagerUserConfig
Property: CreationClassName
Property: Description
Property: DeviceID
Property: DiskIndex
Property: ErrorCleared
Property: ErrorDescription
Property: ErrorMethodology
Property: HiddenSectors
Property: Index
Property: InstallDate
Property: LastErrorCode
Property: Name
Property: NumberOfBlocks
Property: PNPDeviceID
Property: PowerManagementCapabilities
Property: PowerManagementSupported
Property: PrimaryPartition
Property: Purpose
Property: RewritePartition
Property: Size
Property: StartingOffset
Property: Status
Property: StatusInfo
Property: SystemCreationClassName
Property: SystemName
Property: Type

Отображение значений каждого свойства

Теперь у вас может возникнуть другой вопрос. Все, что умеет делать этот сценарий, лишь отображать название каждого свойства класса, а как насчет того, чтобы отображать значение каждого свойства?

Не плохая идея! Давайте посмотрим, можем ли мы изменить сценарий (мы снова вернемся к нашему классу Win32_BootConfiguration) таким образом, чтобы он позволял отобразить не только названия всех свойств, но и также из значения. Чтобы сделать это, давайте попробуем изменить эту строку:


Wscript.Echo "Property: " & objItem.name

На такую:


Wscript.Echo "Property: " & objItem.name & vbTab & "Value: " & objItem.value

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


C:\scripts>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 Value:
Property: Caption       Value:
Property: ConfigurationPath     Value:
Property: Description   Value:
Property: LastDrive     Value:
Property: Name  Value:
Property: ScratchDirectory      Value:
Property: SettingID     Value:
Property: TempDirectory Value:

Хмм, все значения нулевые, т.е. пустые. Почему?

Итак, что же здесь происходит. Посмотрим на эту строку:


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

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


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

Обратите внимание, что мы подключаемся к определенному классу WMI (Win32_BootConfiguration) в нашей строке моникера WMI moniker, поэтому мы можем получить коллекцию, содержащую все свойства этого класса. Затем мы хотим отобразить название и значение каждого свойства. Но значения возвращаются нулевыми (NULL), потому что мы не подключились к определенной ссылке (instance) на этот класс. В словаре WMI Glossary говорится, что ссылка – это представление реального управляемого объекта, который принадлежит к определенному классу, и что ссылки содержат реальные данные, а реальные данные – это именно то, что нам нужно, верно? Итак, как мы можем подключиться к ссылке на класс?

Чтобы подключиться к ссылке на класс, вы должны указать конкретную ссылку, используя ключевое свойство (key property) класса. Снова обратившись к словарю WMI Glossary, мы находим, что ключевое свойство – это свойство, которое позволяет получить уникальный идентификатор (unique identifier) для ссылки на класс, а также, что ключевые свойства помечаются ключевыми классификаторами, из документации MSDN. Давайте посмотрим на страницу MSDN, на которой приводится описание класса Win32_BootConfiguration class, чтобы узнать, что является ключевым свойством этого класса. На рисунке 1 изображена часть этой страницы, на которой рассказывается о ключевом свойстве для этого класса:

Vbscript property узнать значение

Рисунок 1: Ключевое свойство для класса Win32_BootConfiguring class

Из этой страницы MSDN мы можем узнать, что ключевым свойством для класса Win32_BootConfiguration является свойство Name. Это значит, что мы должны указать значение для этого свойства в нашей строке моникера WMI moniker, если мы хотим подключиться к конкретной ссылке на этот класс, чтобы получить значение каждого свойства этого класса. Другими словами, мы должны изменить эту строку сценария:


strWMIQuery = ":Win32_BootConfiguration"

на такую:


strWMIQuery = ":Win32_BootConfiguration.Name='SOMETHING'"

где ‘SOMETHING’ – это значение свойства Name для конкретной ссылки на класс.

Так, как же мы можем выяснить значение ключевого свойства для определенной ссылки на этот класс? Один из способов для этого заключается в использовании программы Windows Management Instrumentation Tester (wbemtest.exe). Запустите ее, набрав в командной строке wbemtest. В результате этого появится следующее окно:

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

Рисунок 2: Тестер инструментария Windows Management Instrumentation Tester

Нажмите на кнопку Connect (подключиться) и подключитесь к пространству имен root\cimv2 namespace:

Тестера инструментария управления Windows

Рисунок 3: Подключение к классу Win32_BootConfiguration

Нажмите на кнопку Connect (подключиться) чтобы вернуться к основному окну, в котором теперь доступны для использования все кнопку:

Тестера инструментария управления Windows

Рисунок 4: Подключившись к классу

Теперь нажмите на кнопку Enum Instances и наберите название класса, чтобы вы смогли отобразить все ссылки на класс:

Класс win32

Рисунок 5: Отображение ссылок на класс

Наконец нажмите на кнопку OK, чтобы увидеть все ссылки на класс, отсортированные ко ключевому свойству (Name):

Класс win32

Рисунок 6: Ссылки на класс Win32_BootConfiguration

Итак, после всего этого мы узнаем, что существует лишь одна ссылка на этот класс на нашем компьютере, и свойство Name этой ссылки имеет значение «BootConfiguration»! Это значит, что для того, чтобы отобразить значения всех свойств класса Win32_BootConfiguration на нашем компьютере, мы должны изменить эту строчку сценария:


strWMIQuery = ":Win32_BootConfiguration"

на такую строку:


strWMIQuery = ":Win32_BootConfiguration.Name='BootConfiguration'"

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


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

strComputer = "."
strWMINamespace = "\root\CIMV2"
strWMIQuery = ":Win32_BootConfiguration.Name='BootConfiguration'"

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

For Each objItem in objWMIService.Properties_
   Wscript.Echo "Property: " & objItem.name & vbTab & "Value: " & objItem.value
Next

И теперь, когда мы запустим наш сценарий, он отобразит не только названия всех свойств, но и также их значения:


C:\scripts>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.Name='BootConfiguration' class
is 9
Property: BootDirectory Value: \WINDOWS
Property: Caption       Value: \Device\Harddisk0\Partition1
Property: ConfigurationPath     Value: \WINDOWS
Property: Description   Value: \Device\Harddisk0\Partition1
Property: LastDrive     Value: C:
Property: Name  Value: BootConfiguration
Property: ScratchDirectory      Value: C:\WINDOWS\system32\config\systemprofile\Local Settings\Temp
Property: SettingID     Value:
Property: TempDirectory Value: C:\WINDOWS\system32\config\systemprofile\Local Settings\Temp

Занесем эту информацию в таблицу, чтобы легче ее прочитать:

BootDirectory \WINDOWS
Caption \Device\Harddisk0\Partition1
ConfigurationPath \WINDOWS
Description \Device\Harddisk0\Partition1
LastDrive C:
Name BootConfiguration
ScratchDirectory C:\WINDOWS\system32\config\systemprofile\Local Settings\Temp
SettingID Value:
TempDirectory C:\WINDOWS\system32\config\systemprofile\Local Settings\Temp

Заключение

Мы можем видеть, что этот простой сценарий для получения всех значений позволил получить нам очень полезную информацию о компьютере! Теперь вы можете самостоятельно попробовать выполнить упражнение: вместо того, чтобы подключиться к ссылке на класс Win32_BootConfiguration class (существует лишь одна ссылка на этот класс), попытайтесь подключиться к классу Win32_DiskPartition (у которого есть несколько ссылок, если на вашей машине больше одного раздела). Для этого сначала используйте программу wbemtest для получения ссылок на этот класс (и чтобы узнать, как отличаются ключевые свойства для этих ссылок), а затем изменит сценарий DisplayClassProperties.vbs, чтобы он отображал свойства и значения определенной ссылки на этот класс (т.е. на указанный вами раздел диска). Удачи!

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 – часть ... [+]