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

Модуль ScheduledTasks

Модуль ScheduledTasks — это компонент операционной системы Microsoft Windows, предназначенный для автоматизации запуска программ, скриптов и выполнения задач по заданному расписанию или при наступлении определённых событий. Модуль реализован в виде службы «Планировщик заданий» (Task Scheduler) и предоставляет программный интерфейс (API) для управления задачами, а также графическую оснастку (taskschd.msc) для администрирования. ScheduledTasks является частью технологии Windows Task Scheduler, которая впервые появилась в Windows 95 (как System Agent) и была значительно переработана в Windows Vista и последующих версиях.

История

Ранние версии

Первая версия планировщика задач, известная как System Agent, была включена в состав Windows 95 (часть пакета Microsoft Plus!). Она позволяла запускать программы по расписанию, но имела ограниченный функционал и не поддерживала сложные триггеры. В Windows 98 и Windows NT 4.0 планировщик был интегрирован в систему, но оставался простым инструментом для однократных или ежедневных запусков.

Windows Vista и Windows Server 2008

Коренная переработка планировщика задач произошла в Windows Vista (2006 год) и Windows Server 2008. Модуль ScheduledTasks был переписан с нуля, появилась поддержка XML-формата для хранения задач (вместо бинарных файлов .job), расширенные триггеры (по событиям, при простое системы, при подключении к сети), а также возможность запуска задач с разными учётными записями и привилегиями. Графическая оснастка была заменена на консоль управления (MMC) с новым интерфейсом.

Современные версии

В Windows 7, 8, 10 и 11, а также в Windows Server 2012/2016/2019/2022 функционал ScheduledTasks остаётся практически неизменным, за исключением добавления новых триггеров (например, при подключении к домену) и улучшения безопасности. Модуль активно используется самой операционной системой для выполнения фоновых задач, таких как дефрагментация дисков, обновление системы, сбор телеметрии и обслуживание хранилища.

Архитектура и компоненты

Служба «Планировщик заданий»

Основой модуля является служба Windows с именем «Task Scheduler» (внутреннее имя — Schedule). Она запускается автоматически при старте системы и работает в фоновом режиме. Служба отвечает за:

  • Загрузку и хранение задач в специальной базе данных (папка %SystemRoot%\System32\Tasks в формате XML).
  • Оценку триггеров и условий запуска.
  • Запуск задач с указанными привилегиями (от имени локальной системы, администратора или обычного пользователя).
  • Логирование выполнения задач в журнал событий Windows (Event Viewer).

Программный интерфейс (API)

Модуль ScheduledTasks предоставляет COM-интерфейсы (Component Object Model), которые позволяют разработчикам создавать, изменять, удалять и запускать задачи программно. Основные объекты:

  • ITaskService — точка входа для подключения к планировщику (локальному или удалённому).
  • ITaskFolder — представляет папку с задачами (например, корневая папка или папка Microsoft).
  • ITaskDefinition — описание задачи: триггеры, действия, условия, настройки.
  • ITrigger — определяет, когда запускать задачу (по времени, при событии, при входе пользователя и т.д.).
  • IAction — действие, которое выполняется при запуске (запуск программы, отправка email, отображение сообщения).
  • IRegisteredTask — зарегистрированная задача, которую можно запустить, остановить или удалить.

API доступен из языков программирования, поддерживающих COM (C++, C#, PowerShell, VBScript). В PowerShell для работы с ScheduledTasks используется модуль ScheduledTasks, который предоставляет командлеты, такие как New-ScheduledTask, Register-ScheduledTask, Start-ScheduledTask и другие.

Графическая оснастка

Для администраторов доступна консоль управления (MMC) с оснасткой «Планировщик заданий» (taskschd.msc). Она позволяет:

  • Просматривать дерево папок с задачами (корневая папка, Microsoft, Windows, Office и т.д.).
  • Создавать и редактировать задачи с помощью мастера.
  • Просматривать историю выполнения задач (вкладка «Журнал»).
  • Запускать, останавливать, отключать и удалять задачи.

Классификация задач

По типу триггера

  • По времени — однократный запуск в определённое время, ежедневно, еженедельно, ежемесячно.
  • При событии — запуск при записи определённого события в журнал Windows (например, ошибка приложения).
  • При запуске системы — выполнение задачи при старте Windows.
  • При входе пользователя — запуск при входе любого пользователя или конкретного пользователя.
  • При простое системы — выполнение задачи, когда компьютер неактивен в течение заданного времени.
  • При подключении к сети — запуск при подключении к определённой сети или к любой сети.
  • При разблокировке рабочей станции — выполнение при разблокировке экрана.

По типу действия

  • Запуск программы — выполнение исполняемого файла (.exe, .bat, .cmd, .ps1, .vbs).
  • Отправка email — отправка электронного письма (устаревшая функция, не рекомендуется в Windows 10/11).
  • Отображение сообщения — показ диалогового окна с текстом (устаревшая функция, не рекомендуется).

По уровню привилегий

  • Запуск с наивысшими правами — задача выполняется от имени учётной записи с правами администратора (даже если пользователь не является администратором).
  • Запуск от имени обычного пользователя — задача выполняется с правами текущего пользователя или указанной учётной записи.
  • Запуск от имени SYSTEM — задача выполняется с правами локальной системы (самый высокий уровень привилегий).

Применение

Системное администрирование

Модуль ScheduledTasks широко используется системными администраторами для автоматизации рутинных операций:

  • Регулярное резервное копирование данных.
  • Очистка временных файлов и журналов.
  • Запуск скриптов для мониторинга состояния серверов.
  • Автоматическая установка обновлений.
  • Запуск задач обслуживания (дефрагментация, проверка дисков).

Разработка программного обеспечения

Разработчики используют API ScheduledTasks для интеграции своих приложений с планировщиком:

  • Обновление приложений по расписанию.
  • Сбор телеметрии и отправка логов.
  • Выполнение фоновых задач (например, синхронизация данных).
  • Создание триггеров для запуска приложений при определённых событиях.

Встроенные задачи Windows

Сама операционная система использует ScheduledTasks для выполнения множества внутренних задач. Примеры:

  • Microsoft\Windows\Defrag — дефрагментация дисков.
  • Microsoft\Windows\WindowsUpdate — проверка и установка обновлений.
  • Microsoft\Windows\DiskDiagnostic — диагностика состояния дисков.
  • Microsoft\Windows\Application Experience — сбор данных о совместимости приложений.
  • Microsoft\Windows\Customer Experience Improvement Program — сбор телеметрии (часть программы улучшения качества ПО).

Безопасность и уязвимости

Повышение привилегий

Модуль ScheduledTasks может быть использован злоумышленниками для повышения привилегий. Если задача настроена на запуск с наивысшими правами, а злоумышленник получает доступ к редактированию этой задачи, он может заменить исполняемый файл на вредоносный, что приведёт к выполнению кода с правами администратора или SYSTEM. Для защиты от таких атак в Windows реализованы механизмы контроля учётных записей (UAC) и проверки подписей задач.

Использование для персистентности

Злоумышленники часто создают задачи в ScheduledTasks для обеспечения постоянного доступа к системе (persistence). Например, задача может быть настроена на запуск вредоносного ПО при каждом входе пользователя или при запуске системы. Для обнаружения таких задач используются средства мониторинга, такие как Sysmon, Windows Event Log и антивирусные решения.

Легитимные инструменты

Некоторые легитимные инструменты, такие как PsExec (Sysinternals) и PowerShell, могут быть использованы для создания задач через ScheduledTasks, что затрудняет различение легитимных и вредоносных действий. Администраторам рекомендуется вести аудит создания и изменения задач через журнал событий (Event ID 4698, 4699, 4700, 4701).

Примеры использования

Создание задачи через PowerShell

``powershell $Action = New-ScheduledTaskAction -Execute "C:\Scripts\backup.ps1" $Trigger = New-ScheduledTaskTrigger -Daily -At "02:00" $Settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries Register-ScheduledTask -TaskName "DailyBackup" -Action $Action -Trigger $Trigger -Settings $Settings -User "SYSTEM" ``

Создание задачи через COM-интерфейс (C#)

``csharp using TaskScheduler; // Подключение к планировщику TaskSchedulerClass scheduler = new TaskSchedulerClass(); scheduler.Connect(null, null, null, null); // Создание задачи ITaskDefinition task = scheduler.NewTask(0); task.RegistrationInfo.Description = "Запуск скрипта каждые 5 минут"; // Триггер ITrigger trigger = task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME); trigger.StartBoundary = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"); // Действие IAction action = task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC); action.Path = "C:\Scripts\monitor.exe"; // Регистрация scheduler.GetFolder("\\").RegisterTaskDefinition("MonitorTask", task, 6, null, null, _TASK_LOGON_TYPE.TASK_LOGON_SERVICE_ACCOUNT, null); ``

Интересные факты

  • В Windows 10 и 11 планировщик задач содержит более 300 встроенных задач, многие из которых отключены по умолчанию.
  • Модуль ScheduledTasks поддерживает удалённое управление задачами через RPC (Remote Procedure Call), что позволяет администраторам управлять задачами на других компьютерах в сети.
  • В Windows 7 и более ранних версиях существовала уязвимость, позволяющая локальному пользователю запускать задачи с правами SYSTEM через манипуляции с файлами задач (CVE-2010-3338).
  • В Windows 10 версии 1809 была добавлена возможность запуска задач при подключении к определённой сети Wi-Fi (триггер SessionStateChange с подтипом RemoteConnect).

Источники

  • Microsoft Docs: «Task Scheduler» (документация по API и оснастке).
  • Windows Internals, Part 1 (7th edition) — Pavel Yosifovich, Mark Russinovich, David Solomon, Alex Ionescu.
  • Microsoft Security Response Center (MSRC) — бюллетени по уязвимостям планировщика задач.
  • TechNet Magazine: «Automating Windows with Task Scheduler» (2007 год).
  • PowerShell Documentation: «ScheduledTasks Module» (Microsoft).

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

На главную BFOmetr →