Открыть сервис

MSFT_TaskTrigger

MSFT_TaskTrigger — это класс, используемый в среде выполнения задач планировщика Windows (Task Scheduler) для определения условий, при которых запускается запланированная задача. Он является частью объектной модели Task Scheduler, доступной через COM-интерфейсы, и представляет собой абстрактный базовый тип для всех конкретных триггеров, таких как триггер времени, события или состояния системы.

Общие сведения

Класс MSFT_TaskTrigger входит в пространство имён Microsoft.Win32.TaskScheduler и реализует интерфейс ITrigger. Он не используется напрямую для создания триггеров, а служит родительским классом для специализированных типов: MSFT_TaskTimeTrigger, MSFT_TaskEventTrigger, MSFT_TaskDailyTrigger, MSFT_TaskWeeklyTrigger, MSFT_TaskMonthlyTrigger, MSFT_TaskMonthlyDOWTrigger, MSFT_TaskIdleTrigger, MSFT_TaskRegistrationTrigger, MSFT_TaskBootTrigger, MSFT_TaskLogonTrigger, MSFT_TaskSessionStateChangeTrigger. Каждый из этих подклассов определяет конкретный механизм активации задачи.

Триггеры являются ключевым элементом планировщика задач Windows, позволяя автоматизировать выполнение программ, скриптов или системных операций в ответ на определённые события или временные условия. Без триггера задача не может быть запущена автоматически; она может быть выполнена только вручную или по запросу.

Структура и свойства

Класс MSFT_TaskTrigger содержит набор общих свойств, которые наследуются всеми типами триггеров. Основные из них:

  • Id — уникальный идентификатор триггера в рамках задачи. Может быть задан явно или сгенерирован автоматически.
  • Type — перечисление TaskTriggerType, указывающее на конкретный тип триггера (например, TimeTrigger, EventTrigger, DailyTrigger).
  • Enabled — логическое значение, определяющее, активен ли триггер. Если false, триггер игнорируется при выполнении задачи.
  • StartBoundary — дата и время, с которых триггер начинает действовать. Если не указано, триггер считается активным с момента создания задачи.
  • EndBoundary — дата и время, после которых триггер перестаёт действовать. Если не указано, триггер активен бессрочно.
  • Repetitionобъект RepetitionPattern, задающий интервал повторения триггера (например, каждые 30 минут) и продолжительность периода повторения.
  • Delay — задержка между наступлением события (или временем) и фактическим запуском задачи. Задаётся в формате TimeSpan.
  • ExecutionTimeLimit — максимальное время выполнения задачи, запущенной по данному триггеру. Если задача превышает лимит, она может быть принудительно завершена.

Все свойства доступны для чтения и записи через соответствующие методы COM-интерфейса ITrigger. В управляемом коде (C#, PowerShell) они представлены как свойства класса Trigger из библиотеки Microsoft.Win32.TaskScheduler.

Типы триггеров

Временные триггеры

Временные триггеры активируют задачу в определённый момент времени или по расписанию. К ним относятся:

  • MSFT_TaskTimeTrigger — запуск один раз в заданное время. Наследуется от MSFT_TaskTrigger.
  • MSFT_TaskDailyTrigger — запуск ежедневно в определённое время. Поддерживает интервал в днях (например, каждый второй день).
  • MSFT_TaskWeeklyTrigger — запуск по дням недели с заданной периодичностью (например, каждый понедельник и среду раз в две недели).
  • MSFT_TaskMonthlyTrigger — запуск в определённые дни месяца (например, 1-е и 15-е число каждого месяца).
  • MSFT_TaskMonthlyDOWTrigger — запуск в определённые дни недели внутри месяца (например, каждый второй вторник месяца).

Событийные триггеры

Событийные триггеры реагируют на системные события, регистрируемые в журнале Windows. Основной класс — MSFT_TaskEventTrigger. Он позволяет задать:

  • Subscription — XPath-запрос к журналу событий (например, <QueryList><Query Id="0"><Select Path="System">*[System[EventID=1074]]</Select></Query></QueryList> для события перезагрузки).
  • Delay — задержка после наступления события перед запуском задачи.
  • ValueQueries — набор пар ключ-значение, извлекающих данные из события (например, имя пользователя или код ошибки).

Триггеры состояния системы

Эти триггеры активируются при изменении состояния операционной системы или пользовательской сессии:

  • MSFT_TaskBootTrigger — запуск при загрузке системы.
  • MSFT_TaskLogonTrigger — запуск при входе пользователя в систему.
  • MSFT_TaskSessionStateChangeTrigger — запуск при изменении состояния сеанса (блокировка, разблокировка, подключение/отключение удалённого рабочего стола).
  • MSFT_TaskRegistrationTrigger — запуск при создании или обновлении задачи.
  • MSFT_TaskIdleTrigger — запуск, когда система переходит в состояние простоя (определяется планировщиком по отсутствию активности пользователя и низкой загрузке процессора).

Использование в планировщике задач Windows

Планировщик задач Windows (Task Scheduler) — компонент операционной системы Microsoft Windows, доступный начиная с Windows 2000 и включённый во все последующие версии, включая Windows 10, Windows 11 и Windows Server. Он предоставляет графический интерфейс (taskschd.msc), командную строку (schtasks.exe) и программный интерфейс (COM-объекты) для управления задачами.

При создании задачи через графический интерфейс пользователь выбирает тип триггера на вкладке «Триггеры». В программном коде на C# или PowerShell триггеры создаются через объект TaskDefinition.Triggers. Пример на C#:

```csharp using Microsoft.Win32.TaskScheduler;

using (TaskService ts = new TaskService()) { TaskDefinition td = ts.NewTask(); td.Triggers.Add(new DailyTrigger { DaysInterval = 1, StartBoundary = DateTime.Today.AddHours(8) }); // ... } ```

В PowerShell триггеры создаются с помощью командлетов модуля ScheduledTasks:

``powershell $trigger = New-ScheduledTaskTrigger -Daily -At "08:00" Register-ScheduledTask -TaskName "MyTask" -Trigger $trigger -Action $action ``

Особенности реализации

Класс MSFT_TaskTrigger реализован как COM-объект в библиотеке taskschd.dll. В управляемом коде он представлен через сборку Microsoft.Win32.TaskScheduler, которая является обёрткой над COM-интерфейсами. При работе с триггерами важно учитывать:

  • Одна задача может содержать несколько триггеров разных типов. Задача запускается при срабатывании любого из активных триггеров.
  • Триггеры могут быть отключены (свойство Enabled = false) без удаления из задачи.
  • Для триггеров с повторением (Repetition) необходимо также задавать StopAtDurationEnd, чтобы ограничить общее время повторений.
  • При использовании событийных триггеров необходимо убедиться, что журнал событий, на который подписывается триггер, не переполнен и не отключён.

Ограничения и совместимость

Класс MSFT_TaskTrigger поддерживается во всех версиях Windows, начиная с Windows Vista и Windows Server 2008. В более ранних версиях (Windows XP, Windows Server 2003) использовалась устаревшая объектная модель ITaskTrigger, которая несовместима с MSFT_TaskTrigger. Для обеспечения обратной совместимости планировщик задач Windows поддерживает оба интерфейса, но при создании новых задач рекомендуется использовать современную модель.

Некоторые типы триггеров имеют ограничения по версиям:

  • MSFT_TaskSessionStateChangeTrigger доступен только в Windows 8 и Windows Server 2012 и новее.
  • MSFT_TaskTimeTrigger с параметром RandomDelay (случайная задержка) поддерживается начиная с Windows 7.

Безопасность

Триггеры задач выполняются в контексте безопасности, заданном для задачи. Если задача настроена на выполнение с правами пользователя, триггер срабатывает только при активной сессии этого пользователя (для триггеров, связанных с сессией). Для системных задач (например, запуск от имени SYSTEM) триггеры работают вне зависимости от наличия активного пользователя.

Не рекомендуется использовать триггеры для задач, которые требуют немедленного выполнения с высокими привилегиями, так как задержка (свойство Delay) может составлять от нескольких секунд до нескольких минут в зависимости от загрузки системы.

Источники

  • Microsoft Docs: Task Scheduler Reference — ITrigger interface
  • Microsoft Docs: TaskTriggerType enumeration
  • Microsoft Docs: ScheduledTasks PowerShell module
  • Microsoft Docs: Task Scheduler — Triggers
  • Windows SDK: taskschd.h — MSFT_TaskTrigger class definition

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →