Часть I
Константин Леонтьев
Если ты один из большинства админов, ты частенько грустишь, выглядывая
из окна и наблюдая, как некоторые твои собратья ездят
на своих «Ягуарах» и «Порше» или готовятся дернуть
в Монте-Карло или какое-нибудь другое экзотическое место.
И, конечно же, ты говоришь себе: «Я знаю о системном
администрировании столько же, сколько и они, но почему именно
у них есть клёвые тачки, яхты и часы «Ролекс»».
Что ж, мы здесь для того, чтобы приоткрыть тебе небольшой секрет. Это
все потому, что они знают, как писать WMI-скрипты, а ты – нет!
Microsoft TechNet:
Bob Wells, Dean Tsaltas, Ethan Wilansky и Greg Stemp
http://www.microsoft.com/technet/scriptcenter/tools/wmimatic.mspx
Начиная карьеру системного администратора, вы, вероятно, и не
задумывались о том, что вместе с вашим профессиональным ростом будет
расти размер и сложность обслуживаемых вами систем. И вот наступил момент,
когда вы поняли, что нужно принципиально новое решение, для того чтобы
справляться с огромным количеством рутины, да ещё и в разных офисах вашей
компании.
Для кого предназначается эта
статья?
Вероятнее всего, вы уже немного знакомы с WMI на практике и используете
некоторые готовые сценарии WMI для решения повседневных задач.
Но, согласитесь, что эффективное использование технологии начинается
только тогда, когда вы понимаете ее архитектуру и четко представляете весь
спектр возможностей, которые эта технология может вам предоставить.
Основная моя цель – кратко изложить основы,
необходимые для эффективного использования вами этой технологии и представить
вам набор рецептов по ее применению в реальных условиях.
Вы получите практический навык работы со всеми
основными средствами WMI, выполнив несколько простых, но весьма полезных
упражнений. Я предполагаю, что вы немного знакомы с программированием на VBScript
и с азами языка SQL, а также имеете общее представление
об объектно-ориентированном программировании. Обратите внимание на готовые
примеры кода, которые помогут вам в вашей работе.
Что такое WMI?
Формально: аббревиатура WMI – это Windows Management Instrumentation
(инструментарий управления Windows). Из этого названия понятно, для чего
создана и применяется эта технология. Стоит лишь добавить, что она давно
перешагнула рамки управления только операционной системой Windows и позволяет
контролировать множество других совместимых с ней приложений.
По своей сути WMI – это расширенная и
адаптированная компанией Microsoft реализация стандарта WBEM (WebBased Enterprise
Management компании DMTF Inc [1]). В основе WBEM лежит идея создания
универсального интерфейса мониторинга и управления к различным системам и
компонентам распределенной информационной среды предприятия с использованием
объектно-ориентированной идеологии и широко распространенных веб-технологий
представления информации: протоколов XML и HTTP. Стандарт WBEM является
правопреемником стандарта DMI (Desktop Management Interface).
В основе структуры представления данных в
стандарте WBEM лежит CIM (Common Information Model – модель информации общего
типа), реализующая объектно-ориентированный подход к представлению компонентов
систем как классов со своим набором свойств и методов, а также принципов
наследования.
Основное средство для описания новых элементов
модели CIM – это синтаксис языка Managed Object Format (MOF), который является
текстовым и легко понятным человеку. Таким образом, любое приложение или
драйвер в операционной системе, которая поддерживает стандарт WBEM, может
добавить к системной модели CIM свой набор классов. Такое расширение модели CIM
позволяет легко интегрировать в единую систему мониторинга и управления все
новые и новые приложения. Для этой интеграции приложение должно лишь
зарегистрировать свои классы в существующей модели CIM и обеспечить стандартные
вызовы встроенных процедур для создания объектов этих классов и наполнения их
свойствами и методами. Набор этих процедур оформляется, как WMI Provider –
специальная библиотека, являющаяся мостом между любым приложением и ядром
службы WMI.
Таким образом, WMI – это открытая унифицированная
библиотека (репозиторий) однотипных интерфейсов доступа к параметрам, настройки
и свойствам различных систем и их компонентов.
Архитектура WMI представлена на рис. 1.

Рисунок 1. Архитектура WMI
Многие производители программного и аппаратного
обеспечения ведут разработку ПО в соответствии со стандартом WBEM. Как
следствие, это ПО совместимо и с WMI, а значит, может управляться через единый
и удобный интерфейс.
Классы, объекты, свойства и
методы
Поскольку WMI построена по объектно-ориентированному принципу, то все данные
об операционной системе, ее свойствах, управляемых приложениях и
обнаруженном оборудовании представлены в виде объектов. Каждый тип объекта
описан классом, в состав которого входят свойства и методы. Определения классов
описаны в MOF-файлах, а объекты этих классов с заполненными свойствами и
доступными методами при их вызове возвращаются WMI-провайдерами. Управляет
созданием и удалением объектов, а также вызовом их методов служба CIM Object
Manager.
Получается, что если мы хотим управлять
настройками сетевого адаптера, то мы должны запросить у CIM Object Manager
экземпляр объекта нужного нам сетевого адаптера (забегая вперед, скажу, что
этот объект принадлежит классу Win32_NetworkAdapterConfiguration) и вызвать
нужные нам методы. В частности, для того чтобы обновить аренду адреса на DHCP
сервере, достаточно вызвать метод RenewDHCPLease экземпляра объекта
Win32_NetworkAdapterConfiguration.
Обзор средств работы с WMI
для администратора
Начнем фактическое знакомство с WMI с обзора утилит, которые позволяют вам
работать с WMI на ОС семейства Windows. Условно разделим этот набор утилит на
поставляемые с операционной системой по умолчанию и набор утилит, которые
потребуется скачивать с сайта компании Microsoft.
К первой категории относятся
следующие утилиты:
n wmimgmt.msc – оснастка консоли MMC,
позволяющая в целом управлять самой системой WMI на выбранном компьютере.
n Winmgmt.exe – консольная утилита управления
WMI. Выполняет аналогичные действия, что и консоль MMC wmimgmt.msc. Кроме того,
является исполняемым файлом сервиса WMI в системе. Для запуска из консоли
используется с опцией /exe (winmgmt.exe /exe).
n Wbemtest.exe – графическая утилита для
интерактивной работы с WMI. Удобна для тестирования классов и методов,
просмотра свойств и т. п.
n Wmic.exe – консольная утилита для вызова
объектов и методов WMI (WMI Console) – присутствует только в Windows XP и Windows
Server 2003.
n mofcomp.exe – компилятор MOF-файлов.
Служит для расширения репозитория WMI и тонких операций с библиотекой классов
WMI, а также для «ремонта» нарушенного репозитория.
Ко второй категории средств для
работы с WMI, которые требуется дополнительно устанавливать, относится:
n WMI Code Creator 1.0 – очень удобная и
полезная утилита для создания готовых сценариев WMI. Поддерживает языки Visual Basic
Script, C# и Visual Basic .NET [2].
n WMI Administrative Tools – комплект средств
в составе: WMI CIM Studio, WMI Event Registration, WMI Event Viewer и WMI Object
Browser). Удобная среда разработки и тестирования WMI-классов и методов [3].
n Scriptomatic 2.0 – мастер в формате Hyper
Text Application (HTA). Удобна для создания готовых сценариев и на различных скриптовых
языках. Поддерживает Visual Basic Script, Perl, Java Script и Python [4].
n Tweakomatic Utility – утилита
в формате Hyper Text Application (HTA). Содержит множество настроек
системы, обычно доступных через утилиты-твикеры (например, Windows XP Power Toys
TweakUI), для которых позволяет сгенерировать WMI-скрипты для их автоматической
настройки. Весьма полезна при разработке сценариев автоматизированной установки
и настройки [5].
Все утилиты, относящиеся ко второй категории,
можно бесплатно скачать с сайта компании Microsoft по ссылкам,
перечисленным в конце статьи. Полезно будет так же посетить раздел загрузки
средств работы со скриптами [6] и общий раздел загрузки средств работы с
WMI [7].
Для того чтобы рассмотреть возможности и
особенности всех средств работы с WMI, которые перечислены выше, не хватит и
целого журнала, поэтому мы кратко остановимся на некоторых из них, на мой
взгляд, наиболее полезных и (или) наиболее употребимых. Собственно, к таким я
отношу следующие утилиты: WBEMTEST, WMIC, WMI Administrative Tools и довольно
новую, но весьма полезную и удачную утилиту WMI Code Creator 1.0.
Надо отметить, что существуют и другие
утилиты и средства работы с WMI, в том числе разработанные не компанией Microsoft,
однако формат статьи не позволяет нам на них останавливаться сколько-нибудь
подробно. Об одном из этих средств я считаю своим долгом хотя бы упомянуть в
этой статье – это ADSI Scriptomatic [8], позволяющее создавать скрипты для
управления службой каталогов Microsoft Active Directory.
Все примеры в этой статье протестированы на
операционной системе Windows XP Service Pack 2, однако должны также корректно
работать и на более ранних версиях OS Windows вплоть до Windows 2000. Если
вам потребуется использовать WMI на более ранних версиях ОС Windows, то вам
необходимо будет установить WMI Core Components 1.5 [9] и последнюю версию Windows
Scripting Host [10, 11] на эти ОС.
Знакомимся с утилитой
WBEMTEST
Для того чтобы прямо сейчас посмотреть, какой набор классов
определен в репозитории WMI на вашем персональном компьютере, достаточно
запустить утилиту wbemtest.exe и установить флажок «Enable All Privileges», как
показано на рис. 2.

Рисунок 2. Основное окно
утилиты WBEMTEST
Далее нажать кнопку «Connect…», в поле
пространства имен вписать root\CIMv2, как это показано на рис. 3, и нажать
кнопку «Connect».

Рисунок 3. Окно настройки
подключения к репозиторию WMI утилиты WBEMTEST

Рисунок 4. Основное окно
утилиты WBEMTEST после подключения к репозиторию WMI
Затем нажмите кнопку «Enum Classes…», выберите «Recursive»,
не заполняйте поле суперкласса и нажмите «Ok». В результате вы получите список
классов, определенный в вашем репозитории WMI, в пространстве имен CIMv2.
Найдите среди всех класс с названием Win32_OperatingSystem (CIM_OperatingSystem),
как это показано на рис. 5.

Рисунок 5. Окно результатов
запроса со списком всех классов WMI пространства имен CIMv2
Дважды щелкнув курсором мыши по классу
Win32_OperatingSystem, посмотреть его свойства. Пример того, как это
выглядит, показан на рис. 6.

Рисунок 6. Окно свойств класса
Win32_OperatingSystem
Далее нажать кнопку «Instances» и в
открывшемся окне дважды щелкнуть курсором мыши по строке в списке экземпляров
операционных систем. В открывшемся окне свойств экземпляра операционной системы
найти свойство («Property») с названием «Name», как это показано на рис.
7.

Рисунок 7. Окно свойств
экземпляра объекта класса Win32_OperatingSystem
И дважды кликнуть по нему курсором мыши. В
открывшемся окне редактора свойств, которое, показано на рис. 8,
скопировать отображаемое значение в буфер обмена. Оно пригодится нам в
дальнейшем.

Рисунок 8. Окно со значением
свойства Name экземпляра объекта класса Win32_OperatingSystem
Далее закройте все окна, кроме
основного окна программы wbemtest. В блокноте отредактируйте строку из
буфера обмена следующем образом:
n Заключите строку в кавычки.
n До первых кавычек добавьте следующий текст:
«Win32_Operating-System.Name=».
n Замените все одинарные обратные слеши на
двойные.
В итоге у вас должна получиться примерно
следующая строка (в зависимости от версии ОС и логического диска, куда она
установлена):
Win32_OperatingSystem.Name="Microsoft
Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1"
Теперь давайте выполним следующее упражнение с
утилитой wbemtest. В уже открытом окне утилиты wbemtest нажмем кнопку «Execute Method…»
и в окошко «GetObjectPath» вставим строку, которую мы подготовили в
блокноте. В появившемся окне (см. рис. 9) вызова метода экземпляра объекта
выберем метод Reboot и нажмем кнопку «Execute!».

Рисунок 9. Окно вызова метода
для экземпляра объекта класса Win32_OperatingSystem утилиты WBEMTEST
Поздравляю, вы только что отправили свою
операционную систему в перезагрузку, используя WMI. Если вы вдруг получили
вместо перезагрузки сообщение об ошибке 0x80041062 «Privilege not held», то это
означает, что вы забыли установить опцию «Enable All Privileges» до подключения
к репозиторию WMI.
Теперь в довершение следует сказать (пока ваш Windows
перезагружается), что при подключении к пространству имен WMI вы можете
подключаться не только на локальной машине, но и как следует из обзора WMI к
любой удаленной. Главное, обладать на той машине необходимыми правами. Но об
этих правах позднее! Для подключения к удаленной машине в окне подключения
достаточно в поле Name Space указать строку вида \\<computername>\root\CIMv2
и указать учетные данные пользователя, обладающего необходимыми правами
(например, Administrator). Пример этого показан на рис. 10.

Рисунок 10. Окно подключение
к пространству имен WMI с явным указанием имени сервера
Не пробуйте подключаться к локальной машине, на
которой запрашиваются объекты и методы WMI (например, на той, на которой сейчас
выполняется утилита wbemtest), используя отличные от текущих учетные данные –
все равно это у вас не получится. Это специальная защита для повышения
локальной безопасности WMI, но о ней мы поговорим позже.
Изучаем работу утилиты WMIC
Для того чтобы воспользоваться этой очень важной и полезной для
администратора утилитой, достаточно запустить интерпретатор командной строки
cmd.exe и в строке приглашения набрать WMIC. После этого у вас появится
приглашение консоли WMI, как это показано на рис. 11.

Рисунок 11. Командное окно с
запущенной утилитой WMIC в интерактивном режиме
Для получения справки по всем командам, доступным
из консоли WMIC, достаточно в строке приглашения ввести команду «/?».
Синтаксис каждой команды или глобальной опции вы можете посмотреть, введя ее
название и знак вопроса.
Например:
process list /?
Так мы работаем с утилитой WMIC
в интерактивном режиме. Однако ничто не мешает нам использовать ее
и в пакетном режиме из наших BAT/CMD-сценариев. Например,
в приглашении командной строки CMD можно написать:
wmic process list /?
и получить тот же результат.
Утилита WMIC создана для удобства использования
WMI прямо из командной строки, поэтому наиболее употребимые классы WMI доступны
для использования под псевдонимами (ALIAS). Вы можете самостоятельно определить
псевдонимы для тех классов, для которых это еще не сделано, или добавить новые
псевдонимы для тех классов WMI, которые уже их имеют.
Список псевдонимов, которые определены на Windows
XP Service Pack 2 по умолчанию с их кратким описанием, приведены в таблице
1.
Таблица 1. Список псевдонимов
утилиты WMIC и соответствие их классам WMI
|
Псевдоним
|
Описание
|
Имя клсса WMI
|
|
BASEBOARD
|
Base board (also
known as a motherboard or system board) management
|
Win32_BIOS
|
|
BIOS
|
Basic
input/output services (BIOS) management
|
Win32_BaseBoard
|
|
BOOTCONFIG
|
Boot configuration management
|
Win32_BootConfiguration
|
|
CDROM
|
CD-ROM management
|
Win32_CDROMDrive
|
|
COMPUTERSYSTEM
|
Computer system management
|
Win32_ComputerSystem
|
|
CPU
|
CPU management
|
WIN32_PROCESSOR
|
|
CSPRODUCT
|
Computer system
product information from SMBIOS
|
Win32_ComputerSystemProduct
|
|
DATAFILE
|
DataFile Management
|
CIM_DataFile
|
|
DCOMAPP
|
DCOM Application management
|
WIN32_DCOMApplication
|
|
DESKTOP
|
User’s Desktop management
|
WIN32_DESKTOP
|
|
DESKTOPMONITOR
|
Desktop Monitor management
|
WIN32_DESKTOPMONITOR
|
|
DEVICEMEMORYADDRESS
|
Device memory addresses management
|
Win32_DeviceMemoryAddress
|
|
DISKDRIVE
|
Physical disk drive management
|
Win32_DiskDrive
|
|
DISKQUOTA
|
Disk space usage
for NTFS volumes
|
Win32_DiskQuota
|
|
DMACHANNEL
|
Direct memory
access (DMA) channel management
|
Win32_DMAChannel
|
|
ENVIRONMENT
|
System environment settings
management
|
Win32_Environment
|
|
FSDIR
|
Filesystem directory entry management
|
Win32_Directory
|
|
GROUP
|
Group account management
|
Win32_Group
|
|
IDECONTROLLER
|
IDE Controller management
|
Win32_IDEController
|
|
IRQ
|
Interrupt
request line (IRQ) management
|
Win32_IRQResource
|
|
JOB
|
Providesaccess
to the jobs scheduled using the schedule service
|
Win32_ScheduledJob
|
|
LOADORDER
|
Management of
system services that define execution dependencies
|
Win32_LoadOrderGroup
|
|
LOGICALDISK
|
Local storage device management
|
Win32_LogicalDisk
|
|
LOGON
|
LOGON Sessions
|
Win32_LogonSession
|
|
MEMCACHE
|
Cache memory management
|
WIN32_CACHEMEMORY
|
|
MEMLOGICAL
|
System memory
management (configuration layout and availability of memory)
|
Win32_LogicalMemoryConfiguration
|
|
MEMPHYSICAL
|
Computer
system’s physical memory management
|
Win32_PhysicalMemoryArray
|
|
NETCLIENT
|
Network Client management
|
WIN32_NetworkClient
|
|
NETLOGIN
|
Network login
information (of a particular user) management
|
Win32_NetworkLoginProfile
|
|
NETPROTOCOL
|
Protocols (and
their network characteristics) management
|
Win32_NetworkProtocol
|
|
NETUSE
|
Active network connection management
|
Win32_NetworkConnection
|
|
NIC
|
Network
Interface Controller (NIC) management
|
Win32_NetworkAdapter
|
|
NICCONFIG
|
Network adapter management
|
Win32_NetworkAdapterConfiguration
|
|
NTDOMAIN
|
NT Domain management
|
Win32_NTDomain
|
|
NTEVENT
|
Entries in the
NT Event Log
|
Win32_NTLogEvent
|
|
NTEVENTLOG
|
NT eventlog file management
|
Win32_NTEventlogFile
|
|
ONBOARDDEVICE
|
Management of
common adapter devices built into the motherboard (system board)
|
Win32_OnBoardDevice
|
|
OS
|
Installed
Operating System/s management
|
Win32_OperatingSystem
|
|
PAGEFILE
|
Virtual memory
file swapping management
|
Win32_PageFileUsage
|
|
PAGEFILESET
|
Page file settings management
|
Win32_PageFileSetting
|
|
PARTITION
|
Management of
partitioned areas of a physical disk
|
Win32_DiskPartition
|
|
PORT
|
I/O port management
|
Win32_PortResource
|
|
PORTCONNECTOR
|
Physical connection ports management
|
Win32_PortConnector
|
|
PRINTER
|
Printer device management
|
Win32_Printer
|
|
PRINTERCONFIG
|
Printer device configuration
management
|
Win32_PrinterConfiguration
|
|
PRINTJOB
|
Print job management
|
Win32_PrintJob
|
|
PROCESS
|
Process management
|
Win32_Process
|
|
PRODUCT
|
Installation package task management
|
Win32_Product
|
|
QFE
|
Quick Fix Engineering
|
Win32_QuickFixEngineering
|
|
QUOTASETTING
|
Setting
information for disk quotas on a volume
|
Win32_QuotaSetting
|
|
RECOVEROS
|
Information that
will be gathered from memory when the operating system fails
|
Win32_OSRecoveryConfiguration
|
|
REGISTRY
|
Computer system registry management
|
Win32_Registry
|
|
SCSICONTROLLER
|
SCSI Controller management
|
Win32_SCSIController
|
|
SERVER
|
Server information management
|
Win32_PerfRawData_PerfNet_Server
|
|
SERVICE
|
Service application management
|
Win32_Service
|
|
SHARE
|
Shared resource management
|
Win32_Share
|
|
SOFTWAREELEMENT
|
Management of theelements
of a software product installed on a system
|
Win32_SoftwareElement
|
|
SOFTWAREFEATURE
|
Management of
software product subsets of SoftwareElement
|
Win32_SoftwareFeature
|
|
SOUNDDEV
|
Sound Device management
|
WIN32_SoundDevice
|
|
STARTUP
|
Management of
commands that run automatically when users log onto the computer system
|
Win32_StartupCommand
|
|
SYSACCOUNT
|
System account management
|
Win32_SystemAccount
|
|
SYSDRIVER
|
Management of
the system driver for a base service
|
Win32_SystemDriver
|
|
SYSTEMENCLOSURE
|
Physical system enclosure management
|
Win32_SystemEnclosure
|
|
SYSTEMSLOT
|
Management of
physical connection points including ports,slots and peripherals, and proprietary
connections points
|
Win32_SystemSlot
|
|
TAPEDRIVE
|
Tape drive management
|
Win32_TapeDrive
|
|
TEMPERATURE
|
|