|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
16.4 Работа с объектами SWbemServices и SWbemObjectОбъекты SWbemServices и SWbemObject в скриптах WMI на VBScript, методы Get(), ExecQuery(), ExecNotificationQuery(), самодокументирование объектов WMI, свойства Properties_ и Method_ После того, как вы успешно подключились к службе WMI на локальном или удаленном компьютере (при помощи SWbemLocator или моникера), вам возвращается ссылка на объект SWbemServices: Dim oLocator Set oLocator = CreateObject("wbemScripting.Swbemlocator") Dim oSvc Set oSvc = oLocator.ConnectServer() MsgBox TypeName(oSvc) Этот объект – основная «рабочая лошадка» WMI. Для него предусмотрено всего одно свойство (уже знакомое нам Security_) и 18 методов. Ниже приведены только наиболее часто используемые, по остальным можно получить информацию при помощи WMI SDK.
Для многих методов предусмотрен также вариант Async - асинхронное выполнение данного метода. В практической работе чаще всего нам потребуется получить ссылку на нужный объект WMI при помощи метода Get или воспользоваться одним из методов Exec... Про эти методы будет рассказано ниже, а пока скажем, что метод Get возвращает ссылку на объект SWbemObject, представляющий указанный вами объект WMI. Синтаксис может быть таким: Dim oWbemObj Set oWbemObj = oSvc.Get("Win32_LogicalDisk.DeviceID='C:'") Сразу скажем, что SWbemObject - это не сам нижележащий объект WMI, а всего лишь оболочка, в которую одет этот объект. Например, у полученного нами объекта SWbemObject нет ни свойства FreeSpace, ни свойства FileSystem, ни свойства VolumeName. Зато при помощи свойства Properties_ этого объекта мы может получить информацию о всех свойствах нижележащего объекта, а при помощи свойства Methods_ - о всех методах. Чтобы случайно не перепутать свойства SWbemObject и нижележащего объекта, названия всех свойств и методов SWbemObject заканчиваются на подчеркивание. Система WMI изначально построена так, чтобы она была в определенной степени самодокументируемой - например, чтобы информацию о всех свойствах и методах объектах WMI можно было получить не при помощи просмотрщика объектов, а просто из кода скрипта. Например, чтобы получить информацию о всех свойствах объекта WMI, представляющего диск "C:", можно использовать код вида For Each item In oWbemObj.Properties_ WScript.Echo item.Name & vbTab & item.Value Next а для получения информации о методах - такую же конструкцию. For Each item In oWbemObj.Methods_ WScript.Echo item.Name Next В первом случае свойство Properties возвращает нам стандартную коллекцию SWbemPropertySet с обычными свойствами и методами типа Add, Remove, Item, Count, которая состоит из объектов SWbemProperty. Важнейшие свойства SWbemProperty таковы:
Для методов все устроено точно также: свойство Methods_возвращает коллекцию SWbemMethodSet, состоящую из объектов SWbemMethod. Важнейшие свойства этого объекта - Name, Qualifiers, InParameters, OutParameters. Создатели WMI настоятельно рекомендуют работать с объектами WMI через их оболочку - SWbemObject. Например, чтобы получить информацию о значении свойства Freespace для нашего диска C:, можно использовать синтаксис вида For Each item In oWbemObj.Properties_ If item.Name = "FreeSpace" Then MsgBox item.value/1024/1024 Next а чтобы поменять значение свойства, можно воспользоваться кодом вида: For Each item In oWbemObj.Properties_ If item.name = "VolumeName" Then item.value = "System" Next oWbemObj.put_ Вызов метода put_ здесь обязателен, иначе значение изменится только в оперативной памяти, а не на компьютере. Для вызова метода объекта WMI рекомендуется воспользоваться методом ExecMethod_: Set process = GetObject("winmgmts:{impersonationLevel=impersonate}!Win32_Process") Set method = process.Methods_("Create") Set inParam = method.inParameters.SpawnInstance_() inParam.CommandLine = "calc.exe" Set outParam = process.ExecMethod_("Create", inParam) Здесь мы вызываем метод Create объекта process (типа SWbemObject) и передаем ему параметр CommandLine. Параметр - тот же самый объект SWbemObject, который создается немного причудливым способом - через коллекцию inParameters. Несмотря на рекомендации Microsoft, большинство разработчиков обращаются к свойствам и методов объектов WMI не через коллекции Properиties_ и Methods_ объекта SWbemObject, а напрямую. Для этого используется тот же самый SWbemObject. Синтаксис обращения к свойству при этом может выглядеть так: MsgBox oWbemObj.VolumeName а синтаксис вызова метода: Dim oLocator Set oLocator = CreateObject("wbemScripting.Swbemlocator") Dim oSvc Set oSvc = oLocator.ConnectServer() Dim oWbemObj Set oWbemObj = oSvc.Get("Win32_Process") oWbemObj.Create ("calc.exe") Несмотря на то, что свойства и методы нижележащего метода не видны из просмотрщика, они вполне доступны.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||