Изучаем синтаксис для быстрой и корректной работы

Окончание. Начало см. в Windows ITPro/RE №1, 2005

В статье «Работаем с триггером событий», опубликованной в предыдущем номере журнала, я представил вниманию читателей триггеры событий, функцию систем Windows Server 2003, Windows XP и Windows 2000, которая позволяет настроить операционную систему на запуск определенных программ в случае появления тех или иных событий. На этот раз я продолжу описание приложения eventtriggers.exe и расскажу еще о нескольких переключателях.

Тонкости синтаксиса

Для начала давайте познакомимся со спецификой синтаксиса команды с ключом/create. Следующий пример представляет собой типичный синтаксис Eventtriggers, требующий от системы обращать внимание на попытки удалить защищенный системный файл (при этом появляется событие с ID 64002) и, если такая попытка имела место, посылать всплывающее сообщение пользователю с именем Jack и паролем swordfish:

eventtriggers /create /tr sysattack /eid 64002
/ru jack /rp swordfish /tk net send jack the
system is under attack!

Но как можно задать имя учетной записи данного пользователя? В отличие от большинства служебных программ Windows, Eventtriggers понимает две формы синтаксиса: domainnameusername и username@domainname. Записи имени в виде bigfirmjack и jack@bigfirm.biz работают одинаково хорошо.

Как же определить, какие триггеры событий действуют в системе? Команда

eventtriggers /query

выдает простой список идентификационных номеров триггеров, который определяет имя каждого триггера и команду, выполняемую в случае срабатывания триггера. Можно добавить параметры /s systemname, /u username и /p password для доступа к списку триггеров удаленной системы. Добавление переключателя /v (verbose) включает/выключает вывод дополнительных подробностей о триггере. Также можно использовать параметр /fo, если нужно представить выходные данные как простую таблицу (выходной формат по умолчанию), список или CSV-файл, содержащий значения, разделенные запятыми (для этого используются параметры table, list и csv соответственно). Например, чтобы вывести подробный список триггеров в виде CSV-файла, используют команду:

eventtriggers /query /fo csv /v

Вам понадобится значение идентификатора триггера, чтобы удалить его из системы. Используйте команду:

eventtriggers /delete /tid

Чтобы удалить все триггеры, можно ввести знак звездочка (*). Или же можно задать диапазон триггеров, которые следует удалить, например:

eventtriggers /delete /tid 1 /tid 5

Журнал триггера

Сразу хочу предупредить, что триггеры не обладают хорошей системой отчетности о своих действиях. Поэтому при их отладке всегда присутствует элемент неожиданности. Система Windows предлагает небольшую помощь: журнал CmdTrigger

Consumer.log. Этот текстовый (ASCII) файл, расположенный в папке windowssystem32wbemlogs, сохраняет информацию всякий раз, когда кто-нибудь создает или удаляет триггер, либо когда триггер не срабатывает. Пример иллюстрирует приблизительное содержание данного журнала:

Wed, Jul 07 2004 12:10:09 PM
TriggerID = 1
Action = Failed to Trigger

Нужно иметь в виду, что здесь отображается факт ошибки при выполнении триггера, а никак не причина ошибки. Но и эта информация может быть полезной. Работая с примерами для статьи, я пытался создать триггеры, которые выполняли бы команды Net Send, но так и не увидел ни одного всплывающего окна из тех, что обычно создает Net Send. Я проверял синтаксис, вводя команды Net Send непосредственно в командную строку, и все работало нормально. Я стал подозревать, что не срабатывает триггер или, возможно, я упустил какой-то аспект синтаксиса Eventtriggers. Проверка журнала подтвердила, что событие появлялось, но триггер пытался выполнить задачу и ему это не удавалось. Тогда я попробовал добавить параметры /ru и /rp, заставляя Eventtriggers использовать мои учетные данные вместо данных учетной записи LocalSystem, и проблема была решена.

Помоги себе сам

Множество эффективных, но дорогостоящих средств мониторинга на рынке могут предупреждать пользователя или даже проявлять инициативу и связываться с ним, когда в системе происходят определенные события. Тем же, кто не может позволить себе подобные решения, советую попытаться воспользоваться Eventtriggers и создать собственную систему оповещения.


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