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 →