Обработка результатов запросов к WMI
На предыдущих страницах мы очень кратко рассмотрели способы подключение к службе WMI и язык запросов WMI. Здесь будет так же кратко рассмотрено что мы можем получить в ответ на запрос и как это обрабатывать. Итак, отправим запрос к WMI.
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set Swbemobjectset = objWMIService.ExecQuery _
("Select * from Win32_LogonSession")
В результате выполнения этого запроса вам вернется коллекция Swbemobjectset с объектами Swbemobject.
В самой коллекции интерес может представлять только свойство Count (количество элементов в коллекции) и метод Item() (который позволяет вернуть нужный элемент). А вот сами элементы коллекции - объекты Swbemobject несут гораздо больше информации.
Полученные объекты обладают как рядом свойств и методов, специфичных для данного класса, так и общими свойствами и методами. Для того, что бы отличить общие методы и свойства от специфических, названия универсальных (общих) методов и свойств заканчиваются символом подчеркивания ("_").
Ниже приведены наиболее часто встречающиеся общие методы и свойства.
Свойство / метод | Описание |
---|---|
Methods_ | Содержит коллекцию методов класса. Только чтение. |
Properties_ | Содержит коллекцию свойств класса. Только чтение. |
IsArray | Работает это свойство с массивом значений или нет. Только чтение. |
Qualifiers_ | Содержит коллекцию допустимых значений для этого свойства, если для него такой набор предусмотрен. Только чтение. |
Специфические методы и свойства для каждого класса описаны в документации. Рассмотрим вывод свойств, присущий определённому классу в данный момент.
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set Swbemobjectset = objWMIService.ExecQuery _
("Select * from Win32_LogonSession")
For Each Swbemobject in Swbemobjectset
Wscript.Echo "AuthenticationPackage: " _
& Swbemobject.AuthenticationPackage &VBCR _
& "Caption: " & Swbemobject.Caption &VBCR _
& "Description: " & Swbemobject.Description &VBCR _
& "InstallDate: " & Swbemobject.InstallDate &VBCR _
& "LogonId: " & Swbemobject.LogonId &VBCR _
& "Name: " & Swbemobject.Name &VBCR _
& "LogonType: " & Swbemobject.LogonType &VBCR _
& "StartTime: " & Swbemobject.StartTime &VBCR _
& "Status: " & Swbemobject.Status
Next
Большинство примеров, которые приводятся в этом разделе сайта, будут похожи на вышеприведенный пример. Отличаться будут имена классов и имена свойств.
Ниже приведен пример универсального вывода названий и значений свойств, присущих заданному классу. Используя описанные выше общие методы и свойства можно определить имя, тип и значения специфических свойств класса.
Dim colItems
Dim objItem
Dim aProperty
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapter")
For Each objItem in colItems
ss = ""
For Each prop in objItem.Properties_
If IsArray(prop) Then
ss= ss & prop.Name & ": " & Join(prop, ", ") &VBCR
Else
If prop.Value <> "" Then
ss= ss & prop.Name & ": " & prop.Value & VBCR
End If
End If
Next
Wscript.Echo ss
Next
Следует отметить, что служба WMI достаточно самодокументирована. Большой объем информации о классе можно получить программно. Так, подключаясь непосредственно к классу можно получить список его свойств:
Dim colItems
strComputer = "."
strNS = "Root\CIMV2" 'имя пространства имён
strClass = "Win32_NetworkAdapterConfiguration" 'имя класса
Set colItems = GetObject("winmgmts:\\" & strComputer & "\" & strNS & ":" & strClass)
ss = ""
For Each prop in colItems.Properties_
ss= ss & prop.Name & VBCR
Next
Wscript.Echo ss
Аналогично можно получить и список его методов:
Dim colItems
strComputer = "."
strNS = "Root\CIMV2" 'имя пространства имён
strClass = "Win32_NetworkAdapterConfiguration" 'имя класса
Set colItems = GetObject("winmgmts:\\" & strComputer & "\" & strNS & ":" & strClass)
ss = ""
For Each prop in colItems.Methods_
ss= ss & prop.Name & VBCR
Next
Wscript.Echo ss
Получение коллекции классов выбранного пространства имён:
strComputer = "." 'имя компьютера
strNS = "Root\Default" 'имя пространства имён
'==========================================================
'Подключение к выбранному пространству имён WMI
Set objService = GetObject("winmgmts:\\" & strComputer & "\" & strNS)
'Получение коллекции классов выбранного пространства имён
Set colClasses = objService.SubclassesOf()
'Перебор коллекции классов
ss = ""
For Each objClass In colClasses
ss= ss & objClass.Path_.Class & VBCR
Next
Wscript.Echo ss
Получение имеющихся квалификаторов определенного метода и класса:
strComputer = "." 'имя компьютера
strNS = "Root\CIMV2" 'имя пространства имён
strClass = "Win32_Process" 'имя класса
strMethod = "Create" 'имя метода
'==========================================================
'Подключение к выбранному классу WMI
Set objClass = GetObject("winmgmts:\\" & strComputer & "\" & strNS & ":" & strClass)
'Перебор квалификаторов метода
ss = ""
For Each objQualifier In objClass.Methods_(strMethod).Qualifiers_
If IsArray(objQualifier.Value) Then
ss= ss & objQualifier.Name & " = " & Join(objQualifier.Value) & VBCR
Else
ss= ss & objQualifier.Name & " = " & objQualifier.Value & VBCR
End If
Next
Wscript.Echo ss
Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуетс¤ регистраци¤).