Když jsem při organizaci převzetí služeb při selhání DHCP narazil na určitou událost (událost Windows), musel jsem čelit potřebě spouštět skripty PowerShell. Myslím si však, že existuje mnoho aplikací. Prohledal síť a našel článek s názvem Spoušť a Powerhell Skript z a Windows Událost. (http://blogs.technet.com/b/wincat/archive/2011/08/25/trigger-a-powershell-script-from-a-windows-event.aspx). Upozorňuji na překlad tohoto článku do ruštiny.
Tento příklad ukazuje, jak udělat dvě věci najednou. Spusťte skript PowerShell, když nastane konkrétní událost systému Windows, a ALSO předejte také potřebné parametry události skriptu ke spuštění. Například použijeme testovací událost generovanou programem Vytvořte událost z příkazového řádku.
Pozadí: Tento skript byl potřebný k vymazání konkrétní veřejné složky, když došlo k určité události (Windows událost). Událost byla zaznamenána po dokončení procesu přidání vodoznaku do konkrétního souboru. Událost použitá v tomto příkladu opakuje standardní formát události.
Budou zobrazeny následující kroky:
- Ruční vytváření a přepínání událostí
- Pomocí konzoly Prohlížeč událostí
- Změna naplánované úlohy pro předání parametrů události skriptu
- Spuštění a spuštění skriptu PowerShell
- Ověřte nastavení
Krok 1: Vytvořte záznam události pomocí Vytvořte událost
C: \> eventcreate / T INFORMACE / SO SomeApplication / ID 1000 / L APLIKACE / D "2011-08-29T21: 24: 03ZC: \ temp \ Some Test File.txtSuccess"
Krok 2: Vytvořte novou úlohu v konzole protokolu prohlížení událostí pomocí kontextové nabídky „Připojit úlohu k této události (“Připojit Úkol do Tohle Událost... “)
Spusťte konzolu Prohlížeč událostí (eventvwr.msc), najít v protokolu událostí Protokoly systému Windows -> Aplikace Událost vytvořená v předchozím kroku. Klikněte na něj pravým tlačítkem a vyberte „Připojit úkol k této události ... "
Poznámka:. Možnosti vytváření spouštěčů událostí pomocí této nabídky byly dříve diskutovány v článku Spouštěče událostí systému Windows..Vytvořte úlohu „Spustit program“ s následujícími parametry:
Program / skript (Program / skript): PowerShell.exe
Argumenty (Přidat argumenty): .\ TriggerScript.ps1 -eventRecordID $ (eventRecordID) -eventChannel $ (eventChannel)
Start in (Start in) (možná budete muset vytvořit tuto složku nebo ukázat na existující složku): c: \ temp
Krok 3: Změňte úlohu tak, aby předávala podrobnosti o události (spoušť událost) a předávání parametrů skriptu Powerhell
Uvnitř Plánovače úloh nahrajte nově vytvořenou úlohu (jako soubor XML). Klepněte pravým tlačítkem myši na úkol „Application_SomeApplication_1000“ ve složce „Úkoly prohlížeče událostí“ a vyberte „Exportovat ... ".
Pomocí programu Poznámkový blok nebo jiného textového editoru (je žádoucí, aby editor podporoval úpravy Unicode, jako je Poznámkový blok), přidejte parametry události, které je třeba vyslat. Parametry události uvedené níže se nejčastěji používají k identifikaci události. Všimněte si, že celý uzel a jeho děti musí být přidány do větve EventTrigger.
Událost / systém / kanál
Event / System / EventRecordID
Událost / systém / úroveň
Takhle:
Z příkazového řádku spusťte následující příkazy, abyste odstranili úlohu plánovače a znovu ji vytvořili pomocí právě upraveného souboru (nevím, jak upravit úkoly pomocí upraveného souboru XML).
C: \> schtasks / delete / TN "Task Viewer Tasks \ Application_SomeApplication_1000"
C: \> schtasks / create / TN "Task Viewer Tasks \ Application_SomeApplication_1000" / XML Application_
SomeApplication_1000.xml
Krok 4: Stvoření Powerhell skript TriggerScript.ps1, který se nazývá úkol plánovač
Poznámka:. Zobrazený skript dostává základní informace o úkolu, který jej spustil. Skript poté dotazuje Protokol událostí systému Windows a zobrazí další podrobnosti o události. V našem příkladu jsou parametry přenášeny prostřednictvím XML, ale lze přenášet jakýkoli další text za předpokladu, že skript dokáže správně analyzovat a přijmout. Mimochodem, parametr „eventRecordID“, který je předán skriptu, by neměl být zaměňován s eventID události. Hodnota eventRecordID je pořadové číslo sekvence přiřazené všem událostem, když jsou zaregistrovány ve svém kanálu (Log'e). EventRecordID je navíc jedinečný pro konkrétní kanál (Protokol).
# Název skriptu: TriggerScript.ps1
# Příklad použití (použijte platné ID nalezené prostřednictvím zobrazení události XML prohlížeče událostí): powershell. \ TriggerScript.ps1 -eventRecordID 1 -eventChannel Application
#
# Vytvořte falešnou událost nebo testování pomocí následujícího příkazu (ze zvýšeného příkazového řádku):
# eventcreate / T INFORMACE / SO SomeApplication / ID 1000 / L APLIKACE / D "2011-08-29T21: 24: 03ZC: \ temp \ Some Test File.txtSuccess"
# Shromažďuje všechny pojmenované parametry (všichni skončí v $ 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 = new-object -comobject wscript.shell
$ popupObject.popup ("RecordID:" + $ eventRecordID + ", Channel:" + $ eventChannel + ", Timestamp:" + $ eventTimestamp + ", File:" + $ eventFile)
Krok 5: Ověřte nastavení generováním nové události podobné té, která byla vytvořena v kroku 1
C: \> eventcreate / T INFORMACE / SO SomeApplication / ID 1000 / L APLIKACE / D "2011-08-29T21: 24: 03ZC: \ temp \ Some Test File.txtSuccess"
Mělo by se zobrazit vyskakovací okno zprávy, jako je tato:
Nepracovali jste? Zkontrolujte následující:
- Zkontrolujte událost v Prohlížeči událostí. Možná budete muset obnovit zobrazení prostřednictvím nabídky Obnovit nebo pomocí tlačítka F5.
- Ručně spusťte skript se skutečnými parametry a podívejte se na možné chyby (věnujte pozornost komentářům ve skriptu, s příklady aplikací). I když je skript „nepodepsaný“, možná budete muset nakonfigurovat PowerShell, aby se spustil jako nepodepsaný (viz PS> get-help about_Execution_Policies).
- Ujistěte se, že úkol je v Plánovači úloh ve složce „Úkoly prohlížeče událostí“ a podívejte se na historii úkolu („Historie“).