Изпълнение на скрипт на PowerShell, когато се случи конкретно събитие

Бях изправен пред необходимостта да стартирам скриптове на PowerShell, когато се случи определено събитие (събитие на Windows), докато организирам променлив DHCP. Смятам обаче, че може да има много приложения. Разрови се в мрежата и намери статия, наречена тригер а PowerShell писменост от а Windows събитие. (Http://blogs.technet.com/b/wincat/archive/2011/08/25/trigger-a-powershell-script-from-a-windows-event.aspx). Представям на вашето внимание превода на тази статия на руски.

Този пример показва как да направите две неща наведнъж. Стартирайте скрипта PowerShell, когато се случи конкретно събитие на Windows и СЪЩО предайте необходимите параметри на събитието на скрипта, за да стартирате. Например, ще използваме тестово събитие, генерирано от програмата EventCreate от командния ред.

Предистория: Този скрипт беше необходим за изчистване на конкретна публична папка, когато се случи конкретно събитие (събитие на Windows). Събитието беше записано след приключване на процеса на добавяне на „воден знак“ към конкретен файл. Събитието, използвано в този пример, повтаря стандартния формат на събитието.

Ще бъдат показани следните стъпки:

  • Ръчно създаване и превключване на събитията
  • Използване на конзолата за преглед на събития
  • Промяна на планирана задача за предаване на параметри на събитието към скрипт
  • Изпълнение и изпълнение на скрипт на PowerShell
  • Проверете настройките

Стъпка 1: Създайте запис на събитието с помощта EventCreate

C: \> eventcreate / T ИНФОРМАЦИЯ / SO SomeApplication / ID 1000 / L ПРИЛОЖЕНИЕ / D "2011-08-29T21: 24: 03ZC: \ temp \ Some Test File.txtSuccess"

Стъпка 2: Създайте нова задача в конзолата на дневника за преглед на събитията, като използвате контекстното меню „Прикачете задача към това събитие (“Прикрепете задача за това събитие... ”)

Стартирайте конзолата Event Viewer (eventvwr.msc), намерете в дневника на събитията Регистрация на Windows -> приложение Събитието, създадено в предишната стъпка. Щракнете с десния бутон върху него и изберете „Прикачете задача към това събитие ... "

забележка. Възможностите за създаване на задействащи събития с помощта на това меню бяха обсъдени по-рано в статията Windows Triggers..

Създайте задача „Стартиране на програма“ със следните параметри:

Програма / сценарий (програма / сценарий): PowerShell.exe

Аргументи (Добавяне на аргументи): .\ TriggerScript.ps1 -eventRecordID $ (eventRecordID) -eventChannel $ (eventChannel)

Започнете от (Start in) (може да се наложи да създадете тази папка или да посочите съществуваща папка): c: \ temp

 Стъпка 3: Променете задачата да предадете подробности за събитието (тригер събитие) и преминаване на параметри към скрипта PowerShell

Вътре в Task Scheduler качете новосъздадената задача (като XML файл). Щракнете с десния бутон на мишката върху задачата "Application_SomeApplication_1000" в папката "Задачи с преглед на събития" и изберете "Експорт ... ".

Използвайки Notepad или друг текстов редактор (желателно е редакторът да поддържа редактиране на Unicode, като Notepad), добавете параметрите на събитието, които трябва да бъдат предадени. Параметрите на събитието, представени по-долу, най-често се използват за идентифициране на събитието. Обърнете внимание, че целият възел и неговите деца трябва да бъдат добавени към клон на EventTrigger.


Събитие / система / канал
Събитие / Система / EventRecordID
Събитие / Система / Ниво

Ето така:

От командния ред изпълнете следните команди, за да изтриете задачата за планиране и да я пресъздадете с помощта на току-що променения файл (не знам как да модифицирам задачите, като използвате модифицирания XML файл).

C: \> schtasks / delete / TN "Задачи с преглед на събития \ Application_SomeApplication_1000"
C: \> schtasks / create / TN "Задачи с преглед на събития \ Application_SomeApplication_1000" / XML Application_
SomeApplication_1000.xml

стъпка 4: създаване PowerShell писменост TriggerScript.ps1, който се нарича назначение разписание

забележка. Показаният скрипт получава основна информация за задачата, която го е стартирала. След това скриптът проучва Дневника на събитията на Windows за други подробности за събитието. В нашия пример, параметрите се предават чрез XML, но всеки друг текст може да бъде предаден, при условие че скриптът може правилно да анализира и приеме. Между другото, параметърът „eventRecordID“, който се предава на скрипта, не трябва да се бърка с eventID на събитието. Стойността на eventRecordID е последователният пореден номер, присвоен на всички събития, когато те са регистрирани в своя канал (Log'e). В допълнение, eventRecordIDs е уникален за конкретен канал (Log).


# Име на скрипта: TriggerScript.ps1
# Пример за използване (използвайте валиден идентификатор, открит чрез XML изглед на събитие на Viewer на събитие): powershell. \ TriggerScript.ps1 -eventRecordID 1 -eventChannel Приложение
#
# Създайте фалшиво събитие или тестване със следната команда (от повишен команден ред):
# eventcreate / T ИНФОРМАЦИЯ / SO SomeApplication / ID 1000 / L ПРИЛОЖЕНИЕ / D "2011-08-29T21: 24: 03ZC: \ temp \ Some Test File.txtSuccess"
# Събира всички именувани параметри (всички останали се оказват в $ Args)
парам ($ eventRecordID, $ eventChannel)

$ event = get-winevent -LogName $ eventChannel -FilterXPath "* [Система [(EventRecordID = $ eventRecordID)]]"
[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 + ", канал:" + $ eventChannel + ", времева марка на събитието:" + $ eventTimestamp + ", файл:" + $ eventFile)

забележка: В допълнение към стартирането на скрипта, задачата на планиращия може да покаже изскачащ прозорец или да изпрати имейл. Изпращането на имейл известия е полезно, за да ви предупреди за редки събития във вашата среда. Подобна задача може да бъде разпространена и чрез GPO (Предпочитания за групови правила).

Стъпка 5: Проверете настройките, като генерирате ново събитие, подобно на това, създадено в Стъпка 1

C: \> eventcreate / T ИНФОРМАЦИЯ / SO SomeApplication / ID 1000 / L ПРИЛОЖЕНИЕ / D "2011-08-29T21: 24: 03ZC: \ temp \ Some Test File.txtSuccess"

Трябва да видите изскачащо съобщение по този начин:

Не работихте ли? Проверете следното:

  • Проверете за събитие в Event Viewer. Може да се наложи да опреснете изгледа чрез менюто Обновяване или бутона F5.
  • Изпълнете ръчно скрипта с реални параметри и разгледайте възможни грешки (обърнете внимание на коментарите в скрипта, с примери за приложения). Докато скриптът е „неподписан“, може да се наложи да конфигурирате PowerShell, за да стартирате това като неподписано (вижте PS> get-help about_Execution_Policies).
  • Уверете се, че задачата е в инструмента за планиране на задачи в папката „Задачи с преглед на събития“ и погледнете историята на задачата („История“).