Zagon skripta PowerShell, ko pride do določenega dogodka

Soočil sem se s potrebo po zagonu skriptov PowerShell, ko se je med organiziranjem preklopa DHCP zgodil določen dogodek (Windows Event). Vendar menim, da je lahko veliko aplikacij. Pokukal je po internetu in našel članek z naslovom Sprožilec a Powerhell Scenarij iz a Windows Dogodek. (http://blogs.technet.com/b/wincat/archive/2011/08/25/trigger-a-powershell-script-from-a-windows-event.aspx). Opozarjam vam prevod tega članka v ruski jezik.

Ta primer prikazuje, kako narediti dve stvari hkrati. Zaženite skript PowerShell, ko pride do določenega dogodka Windows in TUDI posredujte potrebne parametre dogodka skriptu, ki ga želite zagnati. Uporabili bomo na primer testni dogodek, ki ga ustvari program Eventcreate iz ukazne vrstice.

Ozadje: Ta skript je bil potreben za čiščenje določene javne mape ob določenem dogodku (dogodek Windows). Dogodek je bil posnet po končanem postopku dodajanja vodnega žiga v določeno datoteko. Dogodek, uporabljen v tem primeru, ponovi standardno obliko dogodka.

Prikazani bodo naslednji koraki:

  • Ročno ustvarjanje in preklapljanje dogodkov
  • Uporaba konzole za pregledovanje dogodkov
  • Spreminjanje načrtovane naloge za prenos parametrov dogodka v skript
  • Zagon in zagon skripta PowerShell
  • Preverite nastavitve

1. korak: ustvarite zapis dogodkov z uporabo Eventcreate

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

2. korak: Ustvarite novo nalogo v konzoli dnevnika ogledov dogodkov s kontekstnim menijem »Priloži nalogo temu dogodku («Pripni Naloga do Tole Dogodek... ”)

Zaženite konzolo Pregledovalnik dogodkov (eventvwr.msc), poiščite v dnevniku dogodkov Dnevniki Windows -> Uporaba Dogodek, ustvarjen v prejšnjem koraku. Z desno miškino tipko kliknite in izberite »Priloži nalogo temu dogodku ... "

Opomba. Možnosti ustvarjanja sprožilcev dogodkov s tem menijem so bile že obravnavane v članku Prožilniki dogodkov Windows..

Ustvarite nalogo »Zaženi program« z naslednjimi parametri:

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

Argumenti (dodajanje argumentov): .\ TriggerScript.ps1 -eventRecordID $ (eventRecordID) -eventChannel $ (eventChannel)

Začnite v (Začni v) (morda boste morali ustvariti to mapo ali kazati na obstoječo mapo): c: \ temp

 3. korak: Spremenite nalogo za posredovanje podrobnosti o dogodku (sprožilec dogodek) in podajanje parametrov v skript Powerhell

Znotraj orodja za načrtovanje opravil naložite novo ustvarjeno nalogo (kot XML datoteko). Z desno miškino tipko kliknite nalogo "Application_SomeApplication_1000" v mapi "Naloge pregledovalnika dogodkov" in izberite "Izvozi ... ".

Z uporabo Beležnice ali drugega urejevalnika besedil (zaželeno je, da urejevalnik podpira urejanje Unicode, kot je Notepad) dodajte parametre dogodka, ki jih je treba posredovati. Spodaj navedeni parametri se najpogosteje uporabljajo za identifikacijo dogodka. Upoštevajte, da je celotno vozlišče in njene otroke je treba dodati v podružnico EventTriggerja.


Dogodek / sistem / kanal
Dogodek / sistem / EventRecordID
Dogodek / sistem / raven

Takole:

V ukazni vrstici zaženite naslednje ukaze, da izbrišete opravilo planerja in ga znova ustvarite s pravkar spremenjeno datoteko (ne vem, kako spremeniti naloge s pomočjo spremenjene datoteke XML).

C: \> schtasks / delete / TN "Naloge pregledovalnika dogodkov \ Application_SomeApplication_1000"
C: \> schtasks / create / TN "Naloge pregledovalnika dogodkov \ Application_SomeApplication_1000" / XML aplikacija_
SomeApplication_1000.xml

Korak 4: Ustvarjanje Powerhell skripta TriggerScript.ps1, ki se imenuje naloga načrtovalec

Opomba. Prikazani skript prejme osnovne podatke o nalogi, ki ga je sprožila. Skript nato poišče dnevnik dogodkov v sistemu Windows za druge podrobnosti o dogodku. V našem primeru se parametri prenašajo prek XML, lahko pa se prenese tudi katero koli drugo besedilo, pod pogojem, da lahko skript pravilno razčleni in sprejme. Mimogrede, parametra „eventRecordID“, ki je poslan skriptu, ne smemo zamenjevati s eventID dogodka. Vrednost eventRecordID je zaporedna zaporedna številka, dodeljena vsem dogodkom, ko so registrirani v svojem kanalu (Log'e). Poleg tega so eventRecordIDs edinstveni za določen kanal (Dnevnik).


# Ime skripta: TriggerScript.ps1
# Primer uporabe (uporabite veljaven ID, ki ga najdete v XML prikazu dogodka v prikazovalniku dogodkov): powershell. \ TriggerScript.ps1 -eventRecordID 1 -eventChannel Application
#
# Ustvari ponarejen dogodek ali testiranje z naslednjim ukazom (iz povišanega ukaznega poziva):
# eventcreate / T INFORMACIJE / SO SomeApplication / ID 1000 / L PRIJAVA / D "2011-08-29T21: 24: 03ZC: \ temp \ Some Test File.txtSuccess"
# Zbere vse imenovane parametre (vsi ostali so na koncu v $ Args)
param ($ eventRecordID, $ eventChannel)

$ event = get-winevent -LogName $ eventChannel -FilterXPath "* [Sistem [(EventRecordID = $ eventRecordID)]]"
[xml] $ eventParams = $ event.Message
if ($ eventParams.Params.TimeStamp)
[datetime] $ eventTimestamp = $ eventParams.Params.TimeStamp
$ eventFile = $ eventParams.Params.InputFile
$ popupObject = nov-objekt -comobject wscript.shell
$ popupObject.popup ("RecordID:" + $ eventRecordID + ", kanal:" + $ eventChannel + ", časovna oznaka dogodka:" + $ eventTimestamp + ", datoteka:" + $ eventFile)

Opomba: Poleg izvajanja skripta lahko naloga planerja prikaže pojavno okno ali pošlje e-pošto. Pošiljanje e-poštnih obvestil je koristno, da vas opozori na redke dogodke v vašem okolju. Podobno nalogo lahko razdelite tudi prek skupne skupine (Prednost skupinske politike).

5. korak: Preverite nastavitve tako, da ustvarite nov dogodek, podoben tistemu, ustvarjenemu v 1. koraku

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

Videti bi moralo pojavno sporočilo takole:

Niste delovali? Preverite naslednje:

  • Preverite dogodek v prikazovalniku dogodkov. Morda boste morali osvežiti pogled prek menija Osveži ali gumba F5.
  • Ročno zaženite skript z resničnimi parametri in si oglejte morebitne napake (bodite pozorni na komentarje v skriptu s primeri aplikacij). Medtem ko je skript "nepodpisan", boste morda morali konfigurirati PowerShell, da se to zažene kot nepodpisano (glejte PS> get-help about_Execution_Policies).
  • Prepričajte se, da je naloga v orodju za načrtovanje opravil v mapi »Naloge pregledovalnika dogodkov« in si oglejte zgodovino naloge (»Zgodovina«).