V Plánovači úloh systému Windows (Plánovač úloh) je možné spúšťať úlohy podľa plánu aj vtedy, keď sa v protokole objaví konkrétna udalosť (opísané v článku „Spúšťanie udalostí v systéme Windows“). V tomto článku si ukážeme, ako implementovať mechanizmus, ktorý implementuje automatické spustenie úlohy plánovača po dokončení inej úlohy. Zoberme si zjednodušený algoritmus na nastavenie závislostí pri spúšťaní úloh plánovača, ktorý môžete prispôsobiť svojej úlohe.
V mojom prípade bolo po dokončení jedného skriptu potrebné spustiť ďalší skript od iného používateľa. Preto sa tieto akcie nemohli kombinovať do jednej úlohy.
Predpokladajme, že potrebujeme spustiť úlohu plánovača pong po dokončení zadania ping. Pri spustení a ukončení akejkoľvek úlohy sa informácie o tejto udalosti zaznamenajú do systémového denníka. Zameriame sa na výskyt udalosti dokončenia úlohy Ping.
Poďme otvoriť konzolu úloha Scheduler (Taskschd.msc), vyhľadajte a vyberte udalosť Ping a prejdite na kartu v dolnom paneli histórie, obsahujúce informácie o všetkých udalostiach spojených s touto úlohou. Máme záujem o udalosť s kódom 102 (Úloha dokončená) - ktorá sa vygeneruje po dokončení úlohy.
Po otvorení karty otvoríme podrobný popis udalosti detail a prepnite sa do režimu zobrazenia udalostí XML (Zobrazenie XML). Pomocou údajov XML môžete získať všetky podrobnosti o udalosti, ktorú potrebujeme na vytvorenie filtra. Zaujíma nás najmä:
ID udalosti: 102
Názov poskytovateľa: Microsoft-Windows-TaskScheduler
Kanál: Microsoft-Windows-TaskScheduler / Operational
Názov úlohy: \ ping
Pri vytváraní spúšťača pre úlohu Pong musíme vytvoriť spúšťaciu podmienku pre úlohu, keď sa v protokole objaví udalosť 102 (Spúšťač úlohy) Na udalosti). Problém je však v tom, že EventID 102 sa objaví po dokončení ľubovoľnej úlohy, nielen úlohy Ping.
Je však možné vytvoriť flexibilnejšie podmienky pre výber udalostí (zvyk), keď štandardný filter nepomáha dostatočne jasne vybrať udalosť. Kliknite na tlačidlo Nový filter udalostí:
Vytvorme nový filter udalostí, ktorý špecifikuje skôr prijaté údaje z reprezentácie udalosti XML.
Denníky udalostí: Microsoft-Windows-TaskScheduler / Operational
Zdroj udalosti: TaskScheduler
Kategória úlohy: Úloha dokončená
Potom prejdite na kartu XML a vidíme nasledujúcu reprezentáciu filtra vo formáte XML (XPath):
* [Systém [Poskytovateľ [@ Meno = 'Microsoft-Windows-TaskScheduler'] a Úloha = 102]]
Nahradíme kód Xpath nasledujúcim protokolom filtrovania pre prítomnosť udalosti TaskCompleted z úlohy \ ping:
* [Systém [Poskytovateľ [@ Meno = 'Microsoft-Windows-TaskScheduler'] a Úloha = 102]]
Po pridaní tejto udalosti skúste spustiť úlohu ping. Po dokončení by sa mal pong začať okamžite..
Dekódovanie XPath je uvedené nižšie.
Článok je písaný na základe publikačných materiálov Spustenie naplánovanej úlohy za druhou (Http://blogs.msdn.com/b/davethompson/archive/2011/10/25/running-a-scheduled-task-after-another.aspx)