Запуск задания планировщика после завершения другого задания

В планировщике заданий Windows (Task Scheduler) возможно запускать задачи как по расписанию, так и при появлении в журнале определенного события (описывалось в статье «Триггеры событий в Windows»). В этой статье мы разберемся как реализовать механизм, реализующий автоматический запуск задания планировщика по завершению другого задания. Рассмотрим упрощенный алгоритм настройки зависимостей запуска заданий планировщика, который вы сможете адаптировать под свою задачу.

В моем случае нужно было после завершения одного скрипта запустить другой скрипт из-под другого пользователя. Поэтому эти действия нельзя было объединить в рамках одного задания.

Предположим, нам нужно запустить задание планировщика Pong по завершению задания Ping. При запуске и окончании любого задания в журнал системы заносится информация об этом событии. Мы как раз и будем ориентироваться на появление события завершения задания Ping.

Откроем консоль TaskScheduler (Taskschd.msc), найдем и выберем событие Ping и в нижней панели перейдем на вкладку History, содержащую информацию обо всех событиях, связанных с данным заданием. Нас интересует событие с кодом 102 (Task completed) – которое генерируется после завершения задачи. История создания и запуска события планировщика

Откроем подробное описание события, перейдя на вкладку Detail и переключимся в XML режим представления события (XML View). По XML данным можно получить все детали события, которые нам понадобятся для построения фильтра. В частности, нас интересуют:

EventID: 102
Provider-Name: Microsoft-Windows-TaskScheduler
Channel: Microsoft-Windows-TaskScheduler/Operational
TaskName: \ping

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):

<QueryList>
    <Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">
        <Select Path="Microsoft-Windows-TaskScheduler/Operational">
            *[System[Provider[@Name='Microsoft-Windows-TaskScheduler'] and Task = 102]]
        </Select>
    </Query> 
</QueryList>

xml xpath фильтра

Заменим код Xpath на следующий, фильтрующий журнал на наличие события TaskCompleted от задания \ping:

<QueryList>
    <Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">
        <Select Path="Microsoft-Windows-TaskScheduler/Operational">
            *[System[Provider[@Name='Microsoft-Windows-TaskScheduler'] and Task = 102]]
        </Select>
    </Query>
</QueryList>

Собственный фильтр xpath

После добавления этого события попробуйте запустить задание ping. По его завершению должна немедленно запуститься задача pong.

Расшифровка XPath представлена ниже.

xpath структура

Статья написана по материалам публикации Running a Scheduled Task after another.

 

Добавить комментарий


Защитный код
Обновить