Управление ресурсами компьютера с помощью Windows WMI
До того, как WMI не получила широкого распространения, множество вещей о Windows приходилось узнавать вручную. Например, мне понадобился в VB6-проге IP-адрес некоторого компа. Для этого надо точно знать в каком месте он хранится. Для чтения реестра есть много прог, но у меня есть личная, проверенная, которую можно сгрузить отсюда. И соответственно, пару раз перейдя по ссылкам в реестре - мы легко находим Айпишник. (Кстати в NET, и Айпишник и реестр можно прочитать напрямую).
Однако есть и другой путь:
- Запускаем WMI Object Browser. Ну название класса нам все равно знать надо - для этого достаточно взгянуть на справку Wmi - картинка ниже. В самом WMI тоже есть поисковичок классов. И собственно вводим имя требуемого класса в Browser.
- Далее нам выдают выдают выборку по всем адаптерам (ну которые мы собственно и видели в реестре). Выбираем некоторый сетевой адаптер. Заметьте что их достаточно много, включая всякие виртуальные порты.
- И собственно получаем результат со всеми характеристиками этого сетевого интерфейса, причем даже в графическом виде.
- Другой вариант (тоже требует знания названия класса, кроме того надо знать язык WQL - который практически очень похож на SQL). Запускам Wmi Sim Studio - и вводим запрос.
- Получаем искомый Айпишник.
Причем не только пассивно - по своим запросам, но и подписавшись на некоторые события, например, порождаемые оборудованием. Например, на многих сканерах сейчас просто есть кнопка - вызвать прогу сканера. Это как раз реализовано на 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:
- Во-первых, это сведения общего характера о компьютере.
- Cведения обо всех инсталлированных программах и компонентах.
- Сведения обо всех событиях, записанных в журнале.
- Сведения о BIOS.
- Сведения о загрузке.
- Сведения о всех настройках, выполненных на рабочих столах пользователей.
- Сведения о всей иерархии устройств и драйверов.
- Сведения о порядке загрузки драйверов.
- Сведения о памяти комьпьютера.
- Сведения о подключениях сетевых ресурсов.
- Сведения об операционной системе и всех ее дополнениях.
- Сведения о жестких дисках.
- Сведения о всех процессах в системе.
- Сведения о ярлыках на рабочих столах.
- Сведения о системых ресурсах.
- Сведения о всех службах Windows.
- Сведения о драйверах.
- Сведения о настройках времени.
- Сведения о пользователях системы.
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.
|