У планувальнику завдань Windows (Task Scheduler) можливо запускати завдання як за розкладом, так і при появі в журналі певної події (описувалося у статті «Тригери подій в Windows»). У цій статті ми розберемося як реалізувати механізм, який реалізує автоматичний запуск завдання планувальника по завершенню іншого завдання. Розглянемо спрощений алгоритм настройки залежностей запуску завдань планувальника, який ви зможете адаптувати під свою задачу.
У моєму випадку потрібно було після завершення одного скрипта запустити інший скрипт з-під іншого користувача. Тому ці дії не можна було об'єднати в рамках одного завдання.
Припустимо, нам потрібно запустити завдання планувальника Pong по завершенню завдання Ping. При запуску і закінчення будь-якого завдання в журнал системи заноситься інформація про цю подію. Ми якраз і будемо орієнтуватися на появу події завершення завдання Ping.
Відкриємо консоль TaskScheduler (Taskschd.msc), знайдемо і виберемо подія Ping і в нижній панелі перейдемо на вкладку History. що містить інформацію про всі події, пов'язані з даним завданням. Нас цікавить подія з кодом 102 (Task completed) - яке генерується після завершення завдання.
Відкриємо докладний опис події, перейшовши на вкладку Detail і перемкнемося в XML режим подання події (XML View). За XML даними можна отримати всі деталі події, які нам знадобляться для побудови фільтра. Зокрема, нас цікавлять:
При створенні тригера для завдання Pong ми повинні створити умова спрацьовування завдання при появі в журналі події 102 (Тригер завдання On an event). Але проблема в тому, що EventID 102 з'являється при завершенні виконання будь-якого завдання, а не тільки завдання Ping.Однак, є можливість створити більш гнучке умови для вибору подій (Custom), коли стандартний фільтр не допомагає досить чітко вибрати подія. Натисніть на кнопку New Event Filter:
Створимо новий фільтр подій, вказавши раніше отримані дані з XML подання події.
Events Logs. Microsoft-Windows-TaskScheduler / Operational
Event source. TaskScheduler
Task category. Task completed
Потім переходимо на вкладку XML і бачимо таке XML уявлення фільтра (XPath):Замінимо код Xpath на наступний, фільтруючий журнал на наявність події TaskCompleted від завдання \ ping:
Після додавання цієї події спробуйте запустити завдання ping. По його завершенню повинна негайно запуститися завдання pong.Розшифровка XPath представлена нижче.
The Remote Desktop Session Host server does not have a Remote Desktop License Server Specified
Автоматичне очищення логів IIS за допомогою PowerShell
Вирішуємо проблему підключення до L2TP / IPSec VPN сервера за NAT
Resolution: 1346 x 733 56 queries. 0,756 sec 23.41 MB
MAXCACHE: 0.4MB / 0.00036 sec