Использование WMI в LDAP-запросах
Windows Management Instrumentation (WMI) содержит специальный, интерфейс – WMIExtension, который позволяет использовать методы WMI для управления компьютерами, имена которых получаются из каталога Active Directory при помощи LDAP-запросов. Администратор получает возможность сочетать в своих сценариях гибкие и развитые возможности поиска в каталоге (с использованием интерфейсов ADSI) и методы WMI, которые позволяют обращаться ко многим системным параметрам и компонентам (например, выполняющимся сервисам, файловой системе, журналам событий, характеристикам операционной системы и т. д.).
Чтобы проиллюстрировать богатые возможности сценариев, использующих WMI и, в частности, интерфейс WMI ADSI Extension, расширяющий базовые функции ADSI, давайте, следуя хорошей поговорке "Лучше один раз увидеть, чем сто раз услышать.", рассмотрим демонстрационную программу на Basic, которая состоит из отдельных фрагментов кода, позволяющих получить ту или иную информацию о компьютерах домена. Эта программа также иллюстрирует использование интерфейсов ADSI для обращения к объектам Active Directory.
Листинг 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":
Забиваем Сайты В ТОП КУВАЛДОЙ - Уникальные возможности от SeoHammerКаждая ссылка анализируется по трем пакетам оценки: SEO, Трафик и SMM. SeoHammer делает продвижение сайта прозрачным и простым занятием. Ссылки, вечные ссылки, статьи, упоминания, пресс-релизы - используйте по максимуму потенциал SeoHammer для продвижения вашего сайта.Что умеет делать SeoHammer— Продвижение в один клик, интеллектуальный подбор запросов, покупка самых лучших ссылок с высокой степенью качества у лучших бирж ссылок.
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение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
Сервис онлайн-записи на собственном Telegram-ботеПопробуйте сервис онлайн-записи VisitTime на основе вашего собственного Telegram-бота:
— Разгрузит мастера, специалиста или компанию;
— Позволит гибко управлять расписанием и загрузкой;
— Разошлет оповещения о новых услугах или акциях;
— Позволит принять оплату на карту/кошелек/счет;
— Позволит записываться на групповые и персональные посещения;
— Поможет получить от клиента отзывы о визите к вам;
— Включает в себя сервис чаевых.
Для новых пользователей первый месяц бесплатно. Зарегистрироваться в сервисе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
' Отображение всех событий в указанном журнале (Application, ' Security, System и т. д.): Set recSet = WMIServices.ExecQuery_ ("select * from Win32_NTLogEvent WHERE LogFile='Security'") Debug.Print "Событий (ВСЕГО)"; recSet.Count For Each LogFile In recSet ' Последнее по времени событие выводится первым. ' Список свойств содержится в описании WMI-класса Win32_NTEventlog ' Эту информацию можно направить в файл, расположенный на локальном ' компьютере (где выполняется программа): Debug.Print LogFile.Category-String, LogFile.SourceName, _ LogFile.EventCode, LogFile.LogFile, LogFile.TimeGenerated Next Debug.Print vbCrLf ' Go to the next computer i = i + 1 Next Set objAD = Nothing Set obj = Nothing Set ADSObject = Nothing Set WMIServices = Nothing Set WMIObject = Nothing Set recSet = Nothing Set LogFile = Nothing End Sub
Для формирования запросов с целью получения сведений о WMI-объектах используется язык WMI Query Language (WQL). WMI-фильтры, написанные на WQL, применяются также для фильтрации объектов групповых политик (Group Policy Objects, GPO). Для получения дополнительной информации в окне Help and Support Center выполните поиск строки "WQL".