Мне пришлось столкнуться с необходимостью запускать PowerShell скрипты при возникновении определенного события (Windows Event) при организации DHCP failover. Однако, думаю, что применений может быть масса. Покопался в сети и нашел статью под названием Trigger a PowerShell Script from a Windows Event . ( http://blogs.technet.com/b/wincat/archive/2011/08/25/trigger-a-powershell-script-from-a-windows-event.aspx ). Предлагаю Вашему вниманию перевод данной статьи на русский язык.
Этот пример показывает, как сделать две вещи сразу. Запустить скрипт PowerShell при возникновении определенного события Windows Event, а ТАКЖЕ передать нужные параметры Event-а в запускаемый скрипт. Для примера будет использовано тестовое событие сгенерированное при помощи программы EventCreate из командной строки.
Предыстория: Этот сценарий был нужен для очистки определенной общей папки при возникновении специфического события (Windows Event). Событие записывалось после того как завершался процесс внесения «водяного знака» в определенный файл. Событие, используемое в этом примере повторяет формат стандартного события.
Будут показаны следующие шаги:
Шаг 1: Создание записи о событии с помощью EventCreate
C:>eventcreate /T INFORMATION /SO SomeApplication /ID 1000 /L APPLICATION /D "<Params><Timestamp>2011-08-29T21:24:03Z</Timestamp><InputFile>C:tempSome Test File.txt</InputFile><Result>Success</Result></Params>"
Шаг 2: Создаем новое задание в консоли журнала просмотра событий, с помощью контекстного меню «Прикрепить задачу к данному событию (“ Attach Task to This Event …”)
Запустите консоль Event Viewer (eventvwr.msc) , найдите в журнале событий Windows Logs -> Application событие, созданное на предыдущем шаге. Щелкните по нему ПКМ и выберите меню « Attach Task to This Event… »
Программа/скрипт (Program/script): PowerShell.exe
Аргументы (Add arguments): .TriggerScript.ps1 -eventRecordID $(eventRecordID) -eventChannel $(eventChannel)
Запуск в (Start in) (вам может понадобиться создать эту папку или указать на существующую папку): c:temp
Шаг 3: Изменение задачи для передачи деталей события ( trigger event ) и передача параметров в скрипт PowerShell
Внутри Планировщика Задач (Task Scheduler), выгрузите только что созданную задачу (как файл XML). Кликните правой кнопкой мыши на задачу «Application_SomeApplication_1000» в папке «Event Viewer Tasks», и выберите « Export… «.
С помощью блокнота (Notepad) или другого текстового редактора (желательно, чтобы редактор поддерживал редактирование Unicode, как Блокнот) добавим параметры события (Event parameters), которые необходимо передать. Параметры события, представленные ниже, наиболее часто используются для идентификации события. Заметим, что весь узел <ValueQueries> и его дочерние элементы необходимо добавить в ветку EventTrigger.
<ValueQueries>
<Value name="eventChannel">Event/System/Channel</Value>
<Value name="eventRecordID">Event/System/EventRecordID</Value>
<Value name="eventSeverity">Event/System/Level</Value>
</ValueQueries>
Вот так:
Из командной строки запустите следующие команды для удаления задания планировщика и пересоздания ее с помощью только что модифицированного файла (я не знаю способа модифицировать задания с использованием измененного XML файла).
C:>schtasks /delete /TN "Event Viewer TasksApplication_SomeApplication_1000"
C:>schtasks /create /TN "Event Viewer TasksApplication_SomeApplication_1000" /XML Application_
SomeApplication_1000.xml
Шаг 4: Создание PowerShell скрипта TriggerScript.ps1, который вызывается заданием планировщика
# Script Name: TriggerScript.ps1
# Usage Example (use a valid ID found via Event Viewer XML view of an event): powershell .TriggerScript.ps1 -eventRecordID 1 -eventChannel Application
#
# Create a fake event or testing with the following command (from an elevated command prompt):
# eventcreate /T INFORMATION /SO SomeApplication /ID 1000 /L APPLICATION /D "2011-08-29T21:24:03ZC:tempSome Test File.txtSuccess"
# Collects all named paramters (all others end up in $Args)
param($eventRecordID,$eventChannel)
$event = get-winevent -LogName $eventChannel -FilterXPath "<QueryList><Query Id='0' Path='$eventChannel'><Select Path='$eventChannel'>*[System[(EventRecordID=$eventRecordID)]]</Select></Query></QueryList>"
[xml]$eventParams = $event.Message
if ($eventParams.Params.TimeStamp) {
[datetime]$eventTimestamp = $eventParams.Params.TimeStamp
$eventFile = $eventParams.Params.InputFile
$popupObject = new-object -comobject wscript.shell
$popupObject.popup("RecordID: " + $eventRecordID + ", Channel: " + $eventChannel + ", Event Timestamp: " + $eventTimestamp + ", File: " + $eventFile)
}
Шаг 5: Проверка настроек с помощью генерирования нового события, аналогичному созданного в Шаге 1
C:>eventcreate /T INFORMATION /SO SomeApplication /ID 1000 /L APPLICATION /D "<Params><Timestamp>2011-08-29T21:24:03Z</Timestamp><InputFile>C:tempSome Test File.txt</InputFile><Result>Success</Result></Params>"
Вы должны увидеть такое всплывающее окно сообщения:
Не сработало? Проверяем следующее:
Как менялся логотип Apple на протяжении многих лет. Логотип Apple — это не просто символ,…
Security Boot Fail при загрузке Acer — решение проблемы При загрузке ноутбука Acer с флешки,…
Ноутбук не включается — варианты решения Если при попытке включить ноутбук вы обнаруживаете, что он…
The AC power adapter wattage and type cannot be determined — причины и решение При…
Свистит или звенит блок питания компьютера — причины и решения Некоторые владельцы ПК могут обратить…
Мигает Caps Lock на ноутбуке HP — почему и что делать? При включении ноутбука HP…