(Notes) 2004

Управление ресурсами компьютера с помощью Windows WMI

До того, как WMI не получила широкого распространения, множество вещей о Windows приходилось узнавать вручную. Например, мне понадобился в VB6-проге IP-адрес некоторого компа. Для этого надо точно знать в каком месте он хранится. Для чтения реестра есть много прог, но у меня есть личная, проверенная, которую можно сгрузить отсюда. И соответственно, пару раз перейдя по ссылкам в реестре - мы легко находим Айпишник. (Кстати в NET, и Айпишник и реестр можно прочитать напрямую).

Однако есть и другой путь:

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

Причем не только пассивно - по своим запросам, но и подписавшись на некоторые события, например, порождаемые оборудованием. Например, на многих сканерах сейчас просто есть кнопка - вызвать прогу сканера. Это как раз реализовано на WMI. Как раз об и будет сказано чуть подробнее дальше.



Итак, как вы уже поняли - смысл всей истории с WMI - единым способом получить сведения обо всех обьектах Windows. При наличии соответствующих прав можно узнать все не только о локальной системе, но и об удаленной.


Для этого в специальном каталоге создано описание всех возможных обьектов в Windows:


Вся прелесть этой базы в том, что она может быть легко расширена собственными описаниями обьктов, сделанными как вами лично, так и любой фирмой-производителем оборудования или программ. Для этого на языке MOF составляются специальные определения, соотствующие аппаратным или программным обьектам. Эти определения затем компилируются MOF-компилятором.

Логически - база с описаниями всех обьектов системы является иерархической:

И имеет довольно хитрую структуру из классов нескольких разновидностей, каждый из которых имеет свои свойства, методы, события, атрибуты. Но по этой базе можно элементарно составлять SQL-запросы.


WMI уже встроена в ядро системы начиная от Window 95. Конкретно работа WMI обеспечивается специальной службой - в русском варианте имеющей странное название - Инструментарий управления Windows.

Большинство обьектов доступно только по чтению, но некоторые свойства Windows можно устанавливать с помощью WMI.

Доступ к обьектам WMI можно получать с помощью существующих ActiveX компонентов, которые можно самому вызывать из любых скриптов или собственных программ.

Есть несколько готовых HTML-страничек, которые скачиваются с сайта Microsoft, где вызываются WMI-компоненты. (скачать WMITOOLS можно и с моего сайта, т.к. с сайта Microsoft - это полный инсталляционный процесс в InstallSheeld, который часто не проходит из-за конфликта версий WMI).

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


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

Для тех, кому лень читать в оригинале, есть переведенные на русский язык книги аж по 700 страниц с сотнями готовых примеров на компакте. Конечно, эти книги предназначены лишь для поверхностного ознакомления c общими концепциями, но если вам нужна конкретика, например, как именно составлять SQL-запросы к иерархической базе WMI, или исчерпывающий перечень провайдеров (драйверов) WMI с полным перечнем функций, или например описание WMI расширения к ADSI-интерфейсу, или точное описание языка Managed Object Format (MOF) - то, конечно, для этого надо обращаться только к оригиналу.


В практическом плане - это настолько простая и распространенная технология, что даже все основные скриптовые редакторы имеют готовые мастера составления сценариев WMI с десятками предустановленных макроопределений:

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


Поскольку компоненты WMI можно вызывать из любых языков, поддерживающих интерфейс IDispath (т.е. не только из скриптов, но и из чистого VB), а я очень люблю все делать Excel'ом, то я выкладываю здесь исходный текст (импортирумый класс или весь XLS-файл с макросом) - как вытащить на солнышко (да прямо в Excel) всю базу Windows Installer'а:

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


Для того, чтобы вы сами могли написать такую прогу, как у меня, нужно во-первых, не забыть поставить в Бейсике ссылку на нужную библиотеку

И дальше внимательно поработать с отладчиком и документацией:

Еще о программировании на VBA и VBSCRIPT вы пожете почитать здесь Скрипты WSH, здесь - VBA - язык автоматизации Excel, здесь - Сценарии ADSI, здесь - Избавляемся от Microsoft Reporting Services и здесь - OpenSource библиотека ADSI-функций Томаса Еска на VB.NET.



Comments ( )
Link to this page: //www.vb-net.com/windows/wmi/index.htm
< THANKS ME>