Task Scheduler 2.0
Task Scheduler 2.0 — это компонент операционных систем Microsoft Windows, начиная с Windows Vista и Windows Server 2008, выполняющий роль планировщика задач. Он пришёл на смену Task Scheduler 1.0, который использовался в более ранних версиях Windows (Windows 2000, Windows XP, Windows Server 2003). Task Scheduler 2.0 представляет собой полностью переработанную систему, основанную на новой архитектуре, использующей COM-интерфейсы, XML-формат для хранения задач и расширенный набор триггеров и условий запуска.
История и предпосылки
Планировщик задач в Windows впервые появился в Windows 95 (как часть Microsoft Plus! для Windows 95). В Windows 2000 и Windows XP он был представлен как служба с ограниченным функционалом (Task Scheduler 1.0). Задачи хранились в бинарном формате (.job), управление было возможно только через локальный интерфейс, а возможности по настройке условий запуска были минимальными.
С выходом Windows Vista компания Microsoft полностью переписала планировщик, создав Task Scheduler 2.0. Основными причинами стали:
- Необходимость интеграции с новыми функциями ОС: такие механизмы, как автоматическое обслуживание системы (Maintenance), дефрагментация по расписанию, обновления Windows (Windows Update) и восстановление системы, требовали более гибкого и надёжного планировщика.
- Улучшение безопасности и изоляции: новая архитектура позволила запускать задачи в контексте разных учётных записей, включая системную учётную запись (SYSTEM), с возможностью повышения привилегий.
- Поддержка сложных сценариев: появилась возможность задавать множество триггеров (времён, событий, состояний системы) и условий, а также выполнять последовательности действий.
Архитектура и компоненты
Task Scheduler 2.0 состоит из нескольких ключевых компонентов, работающих как в пользовательском режиме, так и в режиме ядра.
Служба планировщика задач (Task Scheduler Service)
Это основная служба Windows (файл svchost.exe, исполняемый модуль taskschd.dll), которая отвечает за:
- Чтение и интерпретацию XML-файлов задач из системной папки
%SystemRoot%\System32\Tasks. - Мониторинг системных событий, времени, состояния системы и других триггеров.
- Запуск задач в соответствии с заданными триггерами и условиями.
- Управление очередью задач и их параллельным выполнением.
- Ведение журнала событий планировщика (Event Log).
Служба запускается автоматически при старте системы и работает в фоновом режиме. Её состояние можно проверить через оснастку services.msc (имя службы: Schedule).
Хранилище задач (Task Folder)
Задачи хранятся в виде отдельных XML-файлов в папке %SystemRoot%\System32\Tasks. Каждый файл имеет расширение .xml и содержит полное описание задачи: триггеры, действия, условия, параметры безопасности, настройки питания и т.д. Структура папок внутри Tasks соответствует иерархии папок, отображаемой в графическом интерфейсе планировщика. Например, задачи, созданные пользователем, обычно находятся в папке \Tasks\Microsoft\Windows\....
COM-интерфейсы (API)
Task Scheduler 2.0 предоставляет набор COM-интерфейсов для программного управления задачами. Основные из них:
- ITaskService — точка входа для подключения к планировщику на локальном или удалённом компьютере.
- ITaskFolder — представляет папку с задачами; позволяет создавать, удалять, перечислять задачи и вложенные папки.
- ITaskDefinition — описывает полную конфигурацию задачи (триггеры, действия, принципалы, настройки).
- ITrigger и его наследники (например, ITimeTrigger, IEventTrigger, ILogonTrigger) — задают условия запуска.
- IAction и его наследники (например, IExecAction, IComHandlerAction, IEmailAction) — описывают действия, выполняемые при срабатывании триггера.
API доступен для использования в скриптах (VBScript, PowerShell) и в приложениях на C++, C#, Visual Basic .NET.
Основные возможности и отличия от версии 1.0
| Характеристика | Task Scheduler 1.0 (Windows XP/2000) | Task Scheduler 2.0 (Windows Vista и новее) |
|---|---|---|
| Формат хранения задач | Бинарный (.job) | XML (.xml) |
| Триггеры | Только по времени (однократно, ежедневно, еженедельно, ежемесячно) | Время, события (Event Log), вход в систему, запуск системы, состояние простоя, блокировка/разблокировка рабочей станции, подключение/отключение от сети, изменение системного времени, создание/изменение файла и др. |
| Условия запуска | Минимальные (только питание от сети) | Мощные: питание от сети/батареи, состояние сети (подключено/отключено), состояние простоя (Idle), наличие/отсутствие пользователя, загрузка ЦП, свободное место на диске и др. |
| Действия | Только запуск приложения/скрипта | Запуск приложения, отправка электронной почты (устарело), показ сообщения (устарело), запуск COM-обработчика |
| Безопасность | Запуск от имени текущего пользователя | Запуск от имени любого пользователя (включая SYSTEM), с возможностью повышения привилегий (Run with highest privileges), изоляция задач, аутентификация через SID |
| Управление | Через оснастку taskschd.msc (ограниченная) | Расширенная оснастка taskschd.msc, командлеты PowerShell (Get-ScheduledTask, New-ScheduledTask, Register-ScheduledTask), COM-API |
| Удалённое управление | Ограниченное (через RPC) | Полноценное через COM/DCOM, WinRM, PowerShell Remoting |
| Версионирование | Нет | Поддержка версий задач (Task Scheduler 2.0, 2.1, 2.2) |
Типы триггеров
Task Scheduler 2.0 поддерживает следующие основные типы триггеров:
- TimeTrigger (Временной триггер): запуск по расписанию (однократно, ежедневно, еженедельно, ежемесячно, при запуске системы, при входе пользователя). Гибкая настройка повторения.
- EventTrigger (Событийный триггер): запуск при регистрации определённого события в системном журнале Event Log (например, ошибка диска, событие безопасности, событие приложения).
- LogonTrigger (Триггер входа в систему): запуск при входе любого или конкретного пользователя.
- BootTrigger (Триггер загрузки системы): запуск после завершения загрузки операционной системы.
- IdleTrigger (Триггер простоя): запуск, когда система переходит в состояние простоя (Idle) в течение заданного времени.
- SessionStateChangeTrigger (Триггер изменения состояния сеанса): запуск при блокировке, разблокировке рабочей станции, подключении или отключении удалённого рабочего стола (RDP).
- RegistrationTrigger (Триггер регистрации задачи): запуск сразу после создания или изменения задачи.
- CustomTrigger (Пользовательский триггер): позволяет создавать триггеры на основе XML-запросов к WMI (Windows Management Instrumentation).
Типы действий
Для каждой задачи можно задать одно или несколько действий, которые выполняются последовательно при срабатывании триггера. Основные типы:
- ExecAction (Запуск программы): запуск исполняемого файла (.exe, .bat, .cmd, .ps1, .vbs и др.) с возможностью передачи аргументов командной строки и указания рабочей папки.
- ComHandlerAction (COM-обработчик): вызов зарегистрированного COM-объекта (CLSID). Используется для выполнения задач, написанных на C++ или C#.
- EmailAction (Отправка электронной почты): отправка письма через SMTP-сервер (считается устаревшим, не рекомендуется к использованию в новых задачах).
- ShowMessageAction (Показ сообщения): вывод диалогового окна с сообщением пользователю (считается устаревшим).
Условия и настройки
Задача может содержать набор условий, которые должны быть выполнены для её запуска, а также настройки, определяющие поведение после запуска.
Условия (Conditions):
- Power: запуск только при питании от сети, остановка при переходе на батарею, пробуждение компьютера из спящего режима.
- Network: запуск только при наличии определённого сетевого подключения (например, только через Ethernet).
- Idle: запуск только когда система простаивает заданное время, остановка при выходе из простоя.
Настройки (Settings):
- Allow task to be run on demand: разрешение ручного запуска.
- Run task as soon as possible after a scheduled start is missed: запуск задачи при первой возможности, если компьютер был выключен в запланированное время.
- If the task fails, restart every [X] minutes: автоматический перезапуск при сбое.
- Stop the task if it runs longer than [X]: принудительное завершение задачи по тайм-ауту.
- If the running task does not end when requested, force it to stop: принудительное завершение процесса.
- Do not start a new instance: запрет на повторный запуск, если экземпляр уже выполняется.
Управление и администрирование
Для управления задачами в Windows существует несколько инструментов:
- Графическая оснастка
taskschd.msc: основной интерфейс для создания, изменения, удаления и просмотра задач. Отображает иерархию папок, журнал выполнения и список активных задач. - Командлеты PowerShell: модуль
ScheduledTasksпредоставляет мощные командлеты для автоматизации управления:
Get-ScheduledTask— получение списка задач.New-ScheduledTask— создание объекта задачи (в памяти).Register-ScheduledTask— регистрация задачи в системе.Set-ScheduledTask— изменение существующей задачи.Start-ScheduledTask/Stop-ScheduledTask— ручной запуск/остановка.Unregister-ScheduledTask— удаление задачи.
- Команда
schtasks.exe: утилита командной строки, присутствующая во всех версиях Windows с Task Scheduler. Позволяет создавать, изменять, запускать и удалять задачи, а также запрашивать их состояние. Синтаксис:schtasks /create /?. - COM-API: для разработчиков, встраивающих планировщик в свои приложения.
Применение
Task Scheduler 2.0 используется в самых разных сценариях:
- Системные задачи: автоматическое обслуживание (дефрагментация, очистка диска), обновления Windows, создание точек восстановления, сбор телеметрии.
- Административные задачи: запуск резервного копирования, синхронизация данных, выполнение скриптов мониторинга, обновление антивирусных баз, отправка отчётов.
- Пользовательские задачи: запуск любимых приложений при входе в систему, автоматическая загрузка файлов, напоминания, запуск скриптов для автоматизации рутинных действий.
- Корпоративные среды: централизованное развёртывание задач через групповые политики (Group Policy) или PowerShell DSC (Desired State Configuration).
Безопасность и ограничения
- Привилегии: задачи могут выполняться от имени любого пользователя, включая SYSTEM (локальная система), LOCAL SERVICE, NETWORK SERVICE. Для задач, требующих прав администратора, необходимо установить флаг «Run with highest privileges».
- Изоляция: задачи выполняются в контексте своей учётной записи, что ограничивает доступ к ресурсам других пользователей.
- Журналирование: все действия планировщика (запуск, остановка, ошибки) фиксируются в журнале событий Windows (Event Viewer) в разделах «Microsoft-Windows-TaskScheduler/Operational» и «System».
- Ограничения на мобильных устройствах: на планшетах и устройствах с Windows RT/ARM планировщик может иметь ограниченный функционал (например, невозможность пробуждения из спящего режима).
- Уязвимости: в прошлом в Task Scheduler находили уязвимости, позволявшие повышение привилегий (например, CVE-2021-36934). Microsoft регулярно выпускает исправления для таких проблем.
Интересные факты
- Task Scheduler 2.0 является основой для механизма «Автоматическое обслуживание» (Automatic Maintenance) в Windows 8 и новее.
- В Windows 10 и Windows 11 появилась возможность создавать задачи, которые запускаются только при подключении к определённой Wi-Fi сети.
- Планировщик задач используется для выполнения задач Microsoft Defender Antivirus, Windows Update, OneDrive и многих других встроенных компонентов.
- XML-схема задач (Task Scheduler Schema) документирована Microsoft и доступна для ознакомления.
Источники
- Microsoft Docs: Task Scheduler
- Microsoft Docs: Task Scheduler Schema
- Windows Internals, 7th Edition (Part 1) by Pavel Yosifovich, Mark E. Russinovich, David A. Solomon, Alex Ionescu
- Документация по командлетам PowerShell ScheduledTasks
- Справочник по утилите schtasks.exe
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →