Uruchamianie skryptu PowerShell, gdy wystąpi określone zdarzenie

Musiałem uruchomić skrypty programu PowerShell, gdy wystąpiło określone zdarzenie (zdarzenie systemu Windows) podczas organizowania przełączania awaryjnego DHCP. Myślę jednak, że może być wiele aplikacji. Przeszukałem sieć i znalazłem artykuł o nazwie Spust a) Powerhell Skrypt z a) Windows Wydarzenie. (http://blogs.technet.com/b/wincat/archive/2011/08/25/trigger-a-powershell-script-from-a-windows-event.aspx). Zwracam uwagę na tłumaczenie tego artykułu na język rosyjski.

Ten przykład pokazuje, jak zrobić dwie rzeczy jednocześnie. Uruchom skrypt PowerShell, gdy wystąpi określone zdarzenie systemu Windows, a także przekaż niezbędne parametry zdarzenia do skryptu, aby go uruchomić. Na przykład użyjemy zdarzenia testowego wygenerowanego przez program Eventcreate z linii poleceń.

Tło: ten skrypt był potrzebny do wyczyszczenia określonego folderu publicznego, gdy wystąpiło określone zdarzenie (zdarzenie systemu Windows). Zdarzenie zostało zarejestrowane po zakończeniu procesu dodawania „znaku wodnego” do określonego pliku. Zdarzenie użyte w tym przykładzie powtarza standardowy format zdarzenia.

Wyświetlone zostaną następujące kroki:

  • Ręczne tworzenie i przełączanie zdarzeń
  • Korzystanie z konsoli Podglądu zdarzeń
  • Zmiana zaplanowanego zadania w celu przekazania parametrów zdarzenia do skryptu
  • Uruchamianie i uruchamianie skryptu PowerShell
  • Sprawdź ustawienia

Krok 1: Utwórz rekord zdarzenia za pomocą Eventcreate

C: \> eventcreate / T INFORMACJE / SO SomeApplication / ID 1000 / L APPLICATION / D "2011-08-29T21: 24: 03ZC: \ temp \ Some Test File.txtSuccess"

Krok 2: Utwórz nowe zadanie w konsoli dziennika przeglądania zdarzeń za pomocą menu kontekstowego „Dołącz zadanie do tego zdarzenia („Dołącz Zadanie do To Wydarzenie... ”)

Uruchom konsolę Podgląd zdarzeń (eventvwr.msc), znajdź w dzienniku zdarzeń Dzienniki systemu Windows -> Zastosowanie Zdarzenie utworzone w poprzednim kroku. Kliknij go prawym przyciskiem myszy i wybierz „Dołącz zadanie do tego wydarzenia ...

Uwaga. Możliwości tworzenia wyzwalaczy zdarzeń za pomocą tego menu zostały wcześniej omówione w artykule Wyzwalacze zdarzeń systemu Windows..

Utwórz zadanie „Uruchom program” z następującymi parametrami:

Program / skrypt (Program / skrypt): PowerShell.exe

Argumenty (dodaj argumenty): .\ TriggerScript.ps1 -eventRecordID $ (eventRecordID) -eventChannel $ (eventChannel)

Rozpocznij za (Rozpocznij za) (może być konieczne utworzenie tego folderu lub wskazanie istniejącego folderu): c: \ temp

 Krok 3: Zmień zadanie, aby przekazać szczegóły zdarzenia (spust wydarzenie) i przekazywanie parametrów do skryptu Powerhell

Wewnątrz Harmonogramu zadań prześlij nowo utworzone zadanie (jako plik XML). Kliknij prawym przyciskiem myszy zadanie „Application_SomeApplication_1000” w folderze „Zadania podglądu zdarzeń” i wybierz „Eksportuj ... „.

Za pomocą Notatnika lub innego edytora tekstu (pożądane jest, aby edytor obsługiwał edycję Unicode, np. Notatnik), dodaj parametry zdarzenia, które należy przesłać. Parametry zdarzenia przedstawione poniżej są najczęściej używane do identyfikacji zdarzenia. Zauważ, że cały węzeł i jego dzieci muszą zostać dodane do gałęzi EventTrigger.


Wydarzenie / System / Kanał
Event / System / EventRecordID
Zdarzenie / System / Poziom

Jak to:

W wierszu polecenia uruchom następujące polecenia, aby usunąć zadanie harmonogramu i ponownie je utworzyć za pomocą właśnie zmodyfikowanego pliku (nie wiem, jak zmodyfikować zadania za pomocą zmodyfikowanego pliku XML).

C: \> schtasks / delete / TN "Zadania podglądu zdarzeń \ Application_SomeApplication_1000"
C: \> schtasks / create / TN "Event Viewer Tasks \ Application_SomeApplication_1000" / XML Application_
SomeApplication_1000.xml

Krok 4: Stworzenie Powerhell skrypt TriggerScript.ps1, który nazywa się zadanie planista

Uwaga. Pokazany skrypt otrzymuje podstawowe informacje o zadaniu, które go uruchomiło. Skrypt następnie sprawdza dziennik zdarzeń systemu Windows w poszukiwaniu innych szczegółów dotyczących zdarzenia. W naszym przykładzie parametry są przesyłane przez XML, ale każdy inny tekst może być przesłany, pod warunkiem, że skrypt może poprawnie przeanalizować i zaakceptować. Nawiasem mówiąc, parametru „eventRecordID”, który jest przekazywany do skryptu, nie należy mylić z identyfikatorem zdarzenia. Wartość eventRecordID to sekwencyjny numer sekwencyjny przypisany do wszystkich zdarzeń, gdy są one zarejestrowane na swoim kanale (Log'e). Ponadto eventRecordIDs jest unikalny dla określonego kanału (Log).


# Nazwa skryptu: TriggerScript.ps1
# Przykład użycia (użyj prawidłowego identyfikatora znalezionego w widoku zdarzeń XML w Podglądzie zdarzeń): powershell. \ TriggerScript.ps1 -eventRecordID 1 -eventChannel Application
#
# Utwórz fałszywe zdarzenie lub test za pomocą następującego polecenia (z wiersza polecenia z podwyższonym poziomem uprawnień):
# eventcreate / T INFORMACJE / SO SomeApplication / ID 1000 / L APPLICATION / D "2011-08-29T21: 24: 03ZC: \ temp \ Some Test File.txtSuccess"
# Zbiera wszystkie nazwane parametry (wszystkie pozostałe kończą się na $ Args)
param ($ eventRecordID, $ eventChannel)

$ event = get-winevent -LogName $ eventChannel -FilterXPath "* [System [(EventRecordID = $ eventRecordID)]]"
[xml] $ eventParams = $ event.Message
if ($ eventParams.Params.TimeStamp)
[datetime] $ eventTimestamp = $ eventParams.Params.TimeStamp
$ eventFile = $ eventParams.Params.InputFile
$ popupObject = nowy obiekt -comobject wscript.shell
$ popupObject.popup („RecordID:” + $ eventRecordID + ”, kanał:„ + $ eventChannel + ”, znacznik czasu zdarzenia:„ + $ eventTimestamp + ”, plik:„ + $ eventFile)

Uwaga: Oprócz uruchomienia skryptu zadanie terminarza może wyświetlić wyskakujące okienko lub wysłać wiadomość e-mail. Wysyłanie powiadomień e-mail jest przydatne do ostrzegania o rzadkich zdarzeniach w twoim środowisku. Podobne zadanie można również rozdzielić za pośrednictwem obiektu zasad grupy (Preferencje zasad grupy).

Krok 5: Sprawdź ustawienia, generując nowe zdarzenie podobne do tego utworzonego w kroku 1

C: \> eventcreate / T INFORMACJE / SO SomeApplication / ID 1000 / L APPLICATION / D "2011-08-29T21: 24: 03ZC: \ temp \ Some Test File.txtSuccess"

Powinien zostać wyświetlony komunikat wyskakujący w następujący sposób:

Nie działał? Sprawdź następujące:

  • Sprawdź wydarzenie w Podglądzie zdarzeń. Może być konieczne odświeżenie widoku za pomocą menu Odśwież lub przycisku F5.
  • Ręcznie uruchom skrypt z rzeczywistymi parametrami i sprawdź możliwe błędy (zwróć uwagę na komentarze w skrypcie, z przykładami aplikacji). Chociaż skrypt jest „niepodpisany”, może być konieczne skonfigurowanie programu PowerShell w celu uruchomienia go jako niepodpisanego (zobacz PS> get-help about_Execution_Policies).
  • Upewnij się, że zadanie znajduje się w Harmonogramie zadań w folderze „Zadania Podglądu zdarzeń” i spójrz na historię zadania („Historia”).