PowerShell-parancsfájl futtatása, amikor egy adott esemény bekövetkezik

A DHCP feladatátvétel megszervezése során egy bizonyos esemény (Windows Event) esetén a PowerShell parancsfájlok futtatásának szükségem volt. Úgy gondolom azonban, hogy sok alkalmazás létezik. Meghökkent az interneten, és talált egy cikket ravasz egy PowerShell forgatókönyv -tól egy A windows esemény. (Http://blogs.technet.com/b/wincat/archive/2011/08/25/trigger-a-powershell-script-from-a-windows-event.aspx). Felhívom a figyelmünkre a cikk orosz nyelvre történő fordítását.

Ez a példa bemutatja, hogyan lehet két dolgot egyszerre csinálni. Futtassa a PowerShell parancsfájlt, amikor egy adott Windows esemény bekövetkezik, és a szükséges eseményparamétereket is átadja a futtatni kívánt parancsfájlnak. Például egy teszt eseményt fogunk használni, amelyet a program generált EventCreate a parancssorból.

Háttér: Erre a szkriptre egy adott nyilvános mappa egy adott esemény (Windows esemény) bekövetkeztének törléséhez volt szükség. Az eseményt rögzítették, miután befejezték a "vízjel" hozzáadását egy adott fájlhoz. A példában használt esemény megismétli a standard eseményformátumot.

A következő lépések jelennek meg:

  • Kézi eseménykészítés és váltás
  • Az Eseménynapló konzol használata
  • Ütemezett feladat megváltoztatása az esemény paramétereinek átadására egy szkripthez
  • A PowerShell szkript futtatása és futtatása
  • Ellenőrizze a beállításokat

1. lépés: Hozzon létre egy eseménybejegyzést a segítségével EventCreate

C: \> eventcreate / T INFORMÁCIÓK / SO SomeApplication / ID 1000 / L ALKALMAZÁS / D "2011-08-29T21: 24: 03ZC: \ temp \ Some Test File.txtSuccess"

2. lépés: Hozzon létre egy új feladatot az eseménymegtekintési napló konzolján a „Csatlakoztasson ehhez az eseményhez (“csatolása feladat hogy ezt esemény... ”)

Indítsa el a konzolt Eseménynapló (eventvwr.msc), megtalálja az eseménynaplóban Windows naplók -> kérelem Az előző lépésben létrehozott esemény. Kattintson a jobb gombbal és válassza a „Csatolja a feladatot ehhez az eseményhez ... "

megjegyzés. Az eseményindítók létrehozásának lehetőségeit a menü segítségével korábban tárgyalták a Windows eseményindítók című cikkben..

Hozzon létre egy „Program indítása” feladatot a következő paraméterekkel:

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

Érvek (érvek hozzáadása): .\ TriggerScript.ps1 -eventRecordID $ (eventRecordID) -eventChannel $ (eventChannel)

Indítás (Indítás) (lehet, hogy létre kell hoznia ezt a mappát, vagy mutatnia kell egy meglévő mappát): c: \ temp

 3. lépés: Változtassa meg a feladatot az esemény részleteinek továbbításához (ravasz esemény) és a paraméterek átadása a szkriptnek PowerShell

Töltse fel az újonnan létrehozott feladatot a Feladat ütemezőn (XML fájlként). Kattintson a jobb gombbal az "Application_SomeApplication_1000" feladatra az "Event Viewer Tasks" mappában, és válassza a "Exportálás ... ".

Jegyzettömb vagy más szövegszerkesztő használatával (kívánatos, hogy a szerkesztő támogatja az Unicode szerkesztését, mint például a Jegyzettömb), adja hozzá az átküldendő eseményparamétereket. Az alább bemutatott eseményparamétereket leggyakrabban az esemény azonosításához használják. Vegye figyelembe, hogy a teljes csomópont és gyermekeit fel kell venni az EventTrigger fiókba.


Esemény / rendszer / csatorna
Esemény / Rendszer / EventRecordID
Esemény / rendszer / szint

Így:

A parancssorból futtassa a következő parancsokat az ütemező feladat törléséhez és az éppen módosított fájl használatával történő újbóli létrehozásához (nem tudom, hogyan kell a feladatokat módosítani a módosított XML fájl használatával).

C: \> schtasks / delete / TN "Eseménynapló-feladatok \ Application_SomeApplication_1000"
C: \> schtasks / create / TN "Eseménynapló-feladatok \ Application_SomeApplication_1000" / XML alkalmazás_
SomeApplication_1000.xml

lépés 4: teremtés PowerShell forgatókönyv TriggerScript.ps1, ami hívják kijelölés ütemező

megjegyzés. A megjelenített szkript alapvető információkat kap a futtatást indító feladatról. Ezután a szkript lekérdezi a Windows eseménynaplóját az esemény további részleteiről. Példánkban a paramétereket XML-n keresztül továbbítják, de bármilyen más szöveget is továbbíthatnak, feltéve, hogy a szkript helyesen elemzi és elfogadja azt.. Mellesleg, az „eventRecordID” paramétert, amelyet átadnak a szkriptnek, nem szabad összekeverni az esemény eventID-jével. Az eventRecordID értéke az összes eseményhez rendelt sorszám, amikor a csatornájukban regisztrálva vannak (Log'e). Ezen túlmenően az eventRecordIDs egyedi egy adott csatornán (Napló).


# Szkript neve: TriggerScript.ps1
# Példa felhasználásra (használjon érvényes azonosítót, amelyet egy esemény Event Viewer XML nézetéből talált meg): powershell. \ TriggerScript.ps1 -eventRecordID 1 -eventChannel alkalmazás
#
# Hozzon létre egy hamis eseményt vagy tesztelést a következő paranccsal (egy emelt parancssorból):
# eventcreate / T INFORMÁCIÓK / SO SomeApplication / ID 1000 / L ALKALMAZÁS / D "2011-08-29T21: 24: 03ZC: \ temp \ Some Test File.txtSuccess"
# Összegyűjti az összes megnevezett paramétert (az összes többi $ Args lesz)
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 = new-object -comobject wscript.shell
$ poppObject.popup ("RecordID:" + $ eventRecordID + ", Csatorna:" + $ eventChannel + ", Esemény időbélyeg:" + $ eventTimestamp + ", Fájl:" + $ eventFile)

megjegyzés: A szkript futtatása mellett az ütemező feladata felbukkanó ablakot is megjeleníthet vagy e-mailt küldhet. Az e-mail értesítések küldése hasznos, hogy figyelmeztesse Önt a környezetében ritka eseményekre. Hasonló feladat a GPO-n keresztül is elosztható (csoportházirend-preferenciák).

5. lépés: Ellenőrizze a beállításokat az 1. lépésben létrehozotthoz hasonló új esemény generálásával

C: \> eventcreate / T INFORMÁCIÓK / SO SomeApplication / ID 1000 / L ALKALMAZÁS / D "2011-08-29T21: 24: 03ZC: \ temp \ Some Test File.txtSuccess"

A következő felbukkanó üzenetet kell látnia:

Nem működött? Ellenőrizze a következőket:

  • Keressen eseményt az Eseménynaplóban. Lehet, hogy frissítenie kell a nézetet a Frissítés menüben vagy az F5 gombbal.
  • A szkript kézi futtatása valós paraméterekkel, és vizsgálja meg a lehetséges hibákat (figyeljen a szkript megjegyzéseire, az alkalmazási példákkal). Miközben a szkript „aláíratlan”, előfordulhat, hogy konfigurálnia kell a PowerShell-et, hogy aláírás nélkül futtassa (lásd: PS> get-help about_Execution_Picicies).
  • Ellenőrizze, hogy a feladat megtalálható-e a Feladatütemezőben az „Event Viewer Tasks” mappában, és nézze meg a feladat előzményeit („Előzmények”).