Инструментарий программиста: WMIClass-Explorer — HackZona.Ru

В данной статье я немного расскажу о такой полезной штуке как WMI и дам инструмент для исследования его классов. Windows Managment Instruments (WMI) — инструментарий управления Windows, технология в основе которой лежит т.н. Общая Информационная Модель, реализующая одинаковый централизованный объектно-ориентированны подход к компонентам системы. Это очень удобно и нет нужды всякий раз вникать в особенности того или иного компонента системы (виртуального или физического). Подключаться к WMI можно из любого языка программирования, поддерживающего технологию COM (Component Object Model). С WMI мы можем писать разнообразные мониторы ресурсов системы, вытворять вещи которые сложно реализовать даже на winapi и многое другое. Так вот, репозиторий подсистемы WMI представляет из себя огромное количество классов (для XP ~3500, w2k3 — ~5000, win7 ипатче — не юзал) реализующих те или иные возможности со своими свойствами и методами. И можете себе представить, всё это множество классов явл

Инструментарий программиста: WMIClass-Explorer

Сообщений в теме: 0
Нравится
Не нравится
Репутация: 0
Рейтинг: 0
Кол-во тем: 0
Сообщения: 0
В данной статье я немного расскажу о такой полезной штуке как WMI и дам инструмент для исследования его классов.

Windows Managment Instruments (WMI) — инструментарий управления Windows, технология в основе которой лежит т.н. Общая Информационная Модель, реализующая одинаковый централизованный объектно-ориентированны подход к компонентам системы. Это очень удобно и нет нужды всякий раз вникать в особенности того или иного компонента системы (виртуального или физического).
Подключаться к WMI можно из любого языка программирования, поддерживающего технологию COM (Component Object Model).
С WMI мы можем писать разнообразные мониторы ресурсов системы, вытворять вещи которые сложно реализовать даже на winapi и многое другое.

Так вот, репозиторий подсистемы WMI представляет из себя огромное количество классов (для XP ~3500, w2k3 — ~5000, win7 ипатче — не юзал) реализующих те или иные возможности со своими свойствами и методами.
И можете себе представить, всё это множество классов является самодокументированным на языке локализации ОС, т.е.по-русски!
А такое даже в MSDN тяжело встретить.

Для целей всестороннего исследования отдельных классов я создал инструмент для автоматизированного создания рускоязычной HTML-документации по WMI-классам.
MSDN по-русски не отходя от кассы! :)
Его код привожу ниже.

[code]
'*******************************************************************************************
'* Имя: WmiClass_Explorer.vbs
'* Язык: VBscript
'* CommandLine: WmiClass_Explorer.vbs [[\\computername]\NameSpace:]wmi_class]
'* Описание: Получение описания WMI-класса, его свойств и методов.
'* Автор: Kiber_punk
'*******************************************************************************************
DIM WMI
DIM TEXT
DIM P,M '// ФЛАГИ ПРИСУТСТВИЯ СВОЙСТВ И МЕТОДОВ
DIM fn

Set WshShell = WScript.CreateObject(«Wscript.Shell»)
if Wscript.Arguments.Count=0 then
classname = InputBox («Задайте имя WMI-класса:»,«WMI-класс»,LOADSETTINGS)
' СОХРАНЕНИЕ НАСТРОЕК
SAVESETTINGS (classname)
else
classname = Wscript.Arguments.Item(0)
End if
IF classname="" then
WScript.Quit
ELSE
GETINFO(CLASSNAME)
GetDescription()
GetMethods()
GEtProps()
GetMethodsDesc()
GEtPropsDesc()
Record()
Open()
End IF

'*************** [Class description] *******************
Sub GETINFO(CLASSNAME_)
ON ERROR RESUME NEXT
'подключение к WMI
set WMI = GetObject («winmgmts:» & classname)
if err.number <>0 then
msgbox «Незвестный класс:»& vbcr &" """& classname &"""",16,«Error»
WScript.quit
End if
TEXT = «Описание класса [» & WMI.path_.Namespace& ":" & WMI.path_.class &"]:"& vbcrlf
End Sub

'*************** [Enum properties] *******************
function GetMethods ()
'ON ERROR RESUME NEXT
M=FALSE
TEMP = TEMP + "----------------------------" &vblf;& "Methods [" & WMI.path_.class &"]:"&vblf;
for each method in wmi.Methods_
if method.name<>"" Then
M=TRUE
TEMP = TEMP + vbTab & ""& method.name & "" & vbcrlf
End if
next
if (M) then TEXT = TEXT & TEMP
End function

'*************** [Enum methods] *******************
function GetProps ()
F=FALSE
'ON ERROR RESUME NEXT
TEMP = TEMP + "----------------------------" &vblf;& "Properties [" & WMI.path_.class &"]:"&vblf;
for each Prop in wmi.Properties_
if Prop.name<>"" Then
P=TRUE
TEMP = TEMP + vbTab & "" & Prop.name &""& vbcrlf
End if
next
if (P) then TEXT = TEXT & TEMP
End function

'---------- [GET DESCRIPTION OF METHODS] — Sub GetMethodsDesc ()
ON ERROR RESUME NEXT
IF (M) THEN
TEXT = TEXT + "
" &vblf;& "Описание Методов [" & WMI.path_.class &"]:"&vblf;&vblf;
for each method in wmi.Methods_
TEMP = (GetObject («winmgmts:»).Get (classname,131072).METHODS_(method.Name).Qualifiers_(«DESCRIPTION»))
IF TEMP<>"" THEN TEXT = TEXT + vbTab & "[" & method.name & "]"& " — " & TEMP & vbcrlf
next
End IF
End Sub

'---------- [GET DESCRIPTION OF PROPERTIES] — Sub GEtPropsDesc ()
ON ERROR RESUME NEXT
IF (P) THEN
TEXT = TEXT + "----------------------------" &vblf;& "Описание Свойств [" & WMI.path_.class &"]:"&vblf;&vblf;
for each Prop in wmi.Properties_
TEMP = (GetObject («winmgmts:»).Get (classname,131072).properties_(Prop.Name).Qualifiers_(«DESCRIPTION»))
IF TEMP<>"" THEN
TEXT = TEXT + vbTab & "[" & Prop.name &"]"& " — " & TEMP & vbcrlf
End IF
next
End IF
End Sub

'*************** [Get Description of class] *******************
Sub GetDescription ()
ON ERROR RESUME NEXT
TEXT = TEXT & vbcrlf& GetObject(«winmgmts:»).Get (classname,131072).Qualifiers_(«Description») & vbcrlf
End Sub

'______________________________________________________________________________

'---------- СОХРАНЕНИЕ НАСТРОЕК ПОИСКА — Sub SAVESETTINGS (KEY_)
ON ERROR RESUME NEXT
CreateObject («wscript.shell»).RegWrite «HKCU\SOFTWARE\True-Script LAB\WMI-soft\WMI-Class Explorer\KEY»,KEY_
End Sub

'---------- ЧТЕНИЕ НАСТРОЕК ПОИСКА — function LOADSETTINGS
on error resume next
LOADSETTINGS = CreateObject («wscript.shell»).RegRead («HKCU\SOFTWARE\True-Script LAB\WMI-soft\WMI-Class Explorer\KEY»)
if LOADSETTINGS="" then LOADSETTINGS="\\.\root\cimv2:win32_process"
End function

'---------- ЗАПИСЬ В ФАЙЛ — Sub Record
fn = ".\CLASSES-Explore & WMI.path_.class &".htm"
Set File = CreateObject («Scripting.FileSystemObject»).OpenTextFile (fn ,2, True)
File.WriteLine "
" &TEXT;
	File.Close()
End Sub
'---------- ОТКРЫТИЕ СОЗДАННОГО СПИСКА -------
Sub Open
	CreateObject ("wscript.shell").run  "hh.exe -800 "  &  fn
	'CreateObject ("Wscript.Shell").run "notepad " &  fn
End Sub
[/code]

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