Использование WMI в LDAP-запросах
Листинг 11.1. Использование программного интерфейса WMI ADSI Extension Option Explicit Sub Main () Dim objAD As lADsContainer Dim obj As IADs Dim ADSObject As WMIExtension Dim WMIServices As SWbemServices Dim WMIObject As SWbemObject Dim recSet As SWbemObjectSet Dim LogFile As SWbemObject Dim i As Integer 'Получить список компьютеров и опросить каждый: Set objAD = GetObject("LDAP://CN=Computers,DC=net,DC=dom") objAD.Filter = Array("computer") i = 1 For Each obj In objAD Debug.Print "#"; i;obj.Name; " ("; obj.ADsPath;")" 'Получение ссылки на объект типа computer из пространства имен LDAP: Set ADSObject = GetObject(obj.ADsPath) Debug.Print "WMI Object Path: " + ADSObject.WMIObjectPath Set WMIObject = ADSObject.GetWMIQbject Debug.Print vbCrLf 'Теперь можно использовать любые свойства или методы объекта WMI. 'Перечень свойств содержится в описании WMI-класса 'Win32_ComputerSystem. 'Вывод некоторой информации о выбранном компьютере: Debug.Print "Состояние = " + WMIObject.Status Debug.Print "Статус загрузки = " + WMIObject.BootUpState Debug.Print "Имя компьютера = " + WMIObj ect.Caption Debug.Print "Роль в домене = " + CStr(WMIObject.DomainRole) Debug.Print "Всего памяти (байт) = " + WMIObject.TotalPhysicalMemory Debug.Print "Зарегистрированный пользователь = " + WMIObject.UserNaroe Debug.Print vbCrLf 'Получить объект служб WMI из пространства имен "root\cimv2": Set WMIServices = ADSObject.GetWMIServices 'Определение установленной системы: Set recSet = WMIServices.ExecQuery_ ("select * from Win32_OperatingSystem") 'Использование интерфейса GetWMIObject для выбора WMI-объекта: For Each WMIObject In recSet Debug.Print WMIObject.Name Next Debug.Print vbCrLf 'Список всех работающих служб: Set recSet = WMIServices.ExecQuery _ ("select * from Win32_Service where Stateo'Stopped'") ' Следующий оператор перечисляет службы, которые не смогли ' запуститься на выбранном компьютере: ' Set recSet = WMIServices.ExecQuery("select * from Win32_Service ' -> where State='Stopped1 and StartMode='Auto'") Debug.Print "Службы (ВСЕГО)"; recSet.Count For Each WMIObject In recSet Debug.Print WMIObject.Name Next Debug.Print vbCrLf ' Список всех процессов, выполняющихся на целевом компьютере: Set recSet = WMIServices.ExecQuery("select*from Win32_Process") Debug.Print "Процессы (ВСЕГО)"; recSet.Count For Each WMIObject In recSet Debug.Print WMIObject.Name Next Debug.Print vbCrLf 'Список журналов системных событий: Set recSet = WMIServices.ExecQuery_ ("select * from Win32_NTEventLogFile") Debug.Print "Журналов событий (ВСЕГО)"; recSet.Count For Each LogFile In recSet
Debug.Print LogFile.Name
'Следующий оператор сохраняет журнал в файле
'на целевом компьютере;
'необходимо лишь сформировать уникальное имя файла:
'LogFile.BackupEventlog ("C:\net.evt")
Next
Debug.Print vbCrLf
Для формирования запросов с целью получения сведений о WMI-объектах используется язык WMI Query Language (WQL). WMI-фильтры, написанные на WQL, применяются также для фильтрации объектов групповых политик (Group Policy Objects, GPO). Для получения дополнительной информации в окне Help and Support Center выполните поиск строки "WQL". |