На каждом компьютере Windows Server 2003, Windows XP, Windows 2000 и Windows NT есть по меньшей мере три журнала. Эти журналы — бесценный источник информации; однако получить к ним доступ очень трудно. Если на предприятии имеется 1000 рабочих станций и серверов, то администратору предстоит регулярно исследовать не менее 3000 журналов. Но с помощью инструмента командной строки операционных систем Windows 2003 и XP можно собирать и фильтровать информацию из журналов событий с локальных и удаленных машин, даже с компьютеров, на которых установлены старые версии операционных систем, предшествующие XP.

Eventquery — программа на VBScript, поэтому вызывать ее, как правило, приходится с помощью cscript.exe. Но если нужно, чтобы Eventquery вела себя как любая другая программа .exe, достаточно просто настроить систему на запуск cscript.exe каждый раз, когда в командной строке вводится eventquery (или название другой программы VBScript). Для этого следует ввести в командной строке

cscript //h:cscript //s
и нажать Enter.

После этого вместо cscript C:windowssystem32eventquery.vbs можно просто ввести команду eventquery.

В ответ на ввод команды eventquery система выдаст записи всех журналов событий на данном компьютере. Чтобы ограничить круг действия команды одним журналом, следует указать параметр /l (команда Eventquery нечувствительна к регистру символов, поэтому можно указать и параметр /L), за которым следует имя журнала. Например, команда

eventquery /l «dns server»

выведет только записи служебного журнала сервера DNS. Если в имени журнала есть пробелы, то его следует заключить в кавычки.

Чтобы извлечь информацию из журнала на удаленной системе, можно задействовать параметры /s systemname, /u username и /p password. Например, чтобы получить данные из журнала Security на удаленной машине с именем MYPC, используя учетную запись Jane с паролем HeLL0, нужно ввести команду

eventquery /l security /s
 mypc /u jane /p HeLL0

Даже запрос, направленный к одной машине и одному журналу, может принести слишком много информации. К счастью, с помощью параметров /r (range) и /fi (filter) объем данных можно уменьшить. Параметру /r присваивается число или диапазон чисел в одном из трех форматов. Например, параметр /r 10 запрашивает десять последних событий, параметр /r -10 запрашивает десять самых старых событий, а /r 10-20 — недавние события с номерами с 10 по 20.

Однако самый необычный компонент Eventquery — параметр /fi. В частности, чтобы увидеть только события журнала Security с ID 528 (успех аудита), следует ввести команду

eventquery /l security /fi «id eq 528»

Значение «id eq 528» заключено в кавычки, так как содержит пробелы. В команде Eventquery нельзя использовать знак равенства (=), поэтому eq означает «равняется». Другие распознаваемые операторы: ne (not equal — не равно), ge (greater than or equal to — больше или равно), le (less than or equal to — меньше или равно), gt (greater than — больше чем) и lt (less than — меньше чем). Помимо фильтрации записей журнала по ID «события», Eventquery позволяет фильтровать записи по времени возникновения события, типу события, имени пользователя, имени компьютера и источнику или категории элемента журнала событий.

Если требуется построить запрос с логическим оператором OR, это делается просто — Eventquery распознает данный оператор. Например, предположим, что активизирован режим аудита неудачных попыток регистрации и администратор хочет выяснить, какие пользователи потерпели неудачу при попытке соединиться с компьютером. Нужно извлечь данные только о событиях с ID 529 и 680, поэтому следует ввести команду:

eventquery /l security /fi
 «id eq 529 or id eq 680»

Можно использовать комбинацию фильтров. Например, можно просмотреть только последние 20 событий:

eventquery /l security /fi
 «id eq 529 or id eq 680» /r 20

Как запросить информацию обо всех событиях с ID от 528 до 540? К сожалению, Eventquery не распознает логический оператор AND, но тот же результат можно получить с помощью нескольких фильтров. Например, можно запросить все записи, ID которых больше или равны 528, и все записи с номерами, меньшими или равными 540:

eventquery /l security /fi
 «id ge 528» /fi «id le 540»

Eventquery нельзя сравнить с Microsoft Operations Manager (MOM), но с помощью утилиты можно составить командные файлы, чтобы получить информацию из журнала событий конкретного сервера. Используя параметр /fo (format), можно даже вывести данные в формате с разделителями в виде запятых (/fo csv). Таким образом, не составит труда направить выходные данные Eventquery в таблицу Microsoft Excel или в базу данных.

Марк Минаси — редактоp Windows NT Magazine MCSE и автор книги «Mastering Windows NT Server 4.0» (издательство Sybex). С ним можно связаться по адресу: mark@minasi.com.