Windows 24 марта 2026 12 мин чтения
ЕС
Евгений Семёнов
Генеральный директор ООО АйТи Фреш · 15+ лет в IT

Планировщик заданий Windows: создание и управление задачами через PowerShell

Планировщик заданий Windows PowerShell

Планировщик заданий (Task Scheduler) — один из ключевых системных компонентов Windows, позволяющий автоматизировать выполнение задач по расписанию, при наступлении событий или при определённых условиях. Графическая консоль taskschd.msc удобна для единичных операций, но когда речь заходит о массовом развёртывании, аудите или миграции задач между серверами, без PowerShell не обойтись.

В этом руководстве мы подробно разберём модуль ScheduledTasks, научимся создавать, изменять, экспортировать и удалять задачи целиком из командной строки, а также рассмотрим типичные сценарии администрирования — от простого бэкапа до сложных цепочек зависимых заданий.

Модуль ScheduledTasks: проверка и подключение

Начиная с Windows 8 / Server 2012 модуль ScheduledTasks входит в состав системы. Убедитесь, что он доступен:

Get-Module -ListAvailable ScheduledTasks
Get-Command -Module ScheduledTasks | Format-Table Name, CommandType

Если модуль не обнаружен (например, на старых системах), используйте COM-объект Schedule.Service или утилиту schtasks.exe. Однако для Windows 10/11 и Server 2016+ штатный модуль — оптимальный вариант.

Совет: Для удалённого управления задачами используйте параметр -CimSession, который поддерживают все командлеты модуля ScheduledTasks. Это позволяет работать с десятками серверов из одной консоли.

Просмотр существующих задач

Прежде чем создавать новые задания, полезно провести инвентаризацию текущих. Командлет Get-ScheduledTask возвращает объекты со всеми свойствами:

# Все задачи, кроме отключённых
Get-ScheduledTask | Where-Object { $_.State -ne 'Disabled' } |
  Select-Object TaskName, TaskPath, State, LastRunTime |
  Sort-Object LastRunTime -Descending |
  Format-Table -AutoSize

Для получения результата последнего запуска используйте связанный командлет:

Get-ScheduledTaskInfo -TaskName "Backup-Daily" |
  Select-Object LastRunTime, LastTaskResult, NextRunTime

Код результата 0 означает успех, 0x1 — задача завершена с ошибкой, 0x41301 — задача всё ещё выполняется.

Совет: Экспортируйте список задач в CSV для документирования: Get-ScheduledTask | Export-Csv -Path C:\Reports\tasks.csv -NoTypeInformation -Encoding UTF8

Создание задачи: базовый сценарий

Создание задачи в PowerShell состоит из трёх этапов: определение действия (Action), триггера (Trigger) и регистрация задачи. Рассмотрим классический пример — ежедневный бэкап:

# 1. Действие — запуск скрипта
$action = New-ScheduledTaskAction `
    -Execute "PowerShell.exe" `
    -Argument "-NoProfile -ExecutionPolicy Bypass -File C:\Scripts\Backup.ps1" `
    -WorkingDirectory "C:\Scripts"

# 2. Триггер — каждый день в 02:00
$trigger = New-ScheduledTaskTrigger -Daily -At "02:00"

# 3. Регистрация
Register-ScheduledTask `
    -TaskName "Backup-Daily" `
    -TaskPath "\ITfresh\" `
    -Action $action `
    -Trigger $trigger `
    -Description "Ежедневное резервное копирование данных" `
    -User "NT AUTHORITY\SYSTEM" `
    -RunLevel Highest

Параметр -TaskPath создаёт папку в планировщике, что упрощает организацию. Параметр -RunLevel Highest запускает задачу с повышенными привилегиями.

Внимание: При использовании -User "NT AUTHORITY\SYSTEM" задача выполняется от имени системы и не видна на рабочем столе пользователя. Если скрипт должен взаимодействовать с GUI, укажите конкретную учётную запись и параметр -AllowStartIfOnBatteries.

Типы триггеров: расписание на все случаи

Модуль предоставляет гибкую систему триггеров. Вот основные варианты:

# Однократный запуск
$once = New-ScheduledTaskTrigger -Once -At "2026-04-01 09:00"

# Еженедельно по понедельникам и средам
$weekly = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday,Wednesday -At "08:00"

# При входе пользователя в систему
$logon = New-ScheduledTaskTrigger -AtLogOn -User "DOMAIN\admin"

# При запуске компьютера
$startup = New-ScheduledTaskTrigger -AtStartup

# Повторение каждые 30 минут в течение 8 часов
$repeat = New-ScheduledTaskTrigger -Once -At "08:00" `
    -RepetitionInterval (New-TimeSpan -Minutes 30) `
    -RepetitionDuration (New-TimeSpan -Hours 8)

Несколько триггеров можно назначить одной задаче, передав массив в параметр -Trigger:

Register-ScheduledTask -TaskName "Multi-Trigger" `
    -Action $action -Trigger $startup, $weekly

Настройка параметров (Settings) задачи

Объект настроек контролирует поведение задачи при различных условиях — от потери сетевого подключения до работы от батареи:

$settings = New-ScheduledTaskSettingsSet `
    -AllowStartIfOnBatteries `
    -DontStopIfGoingOnBatteries `
    -StartWhenAvailable `
    -RestartCount 3 `
    -RestartInterval (New-TimeSpan -Minutes 5) `
    -ExecutionTimeLimit (New-TimeSpan -Hours 2) `
    -MultipleInstances IgnoreNew

Register-ScheduledTask -TaskName "Robust-Task" `
    -Action $action -Trigger $trigger `
    -Settings $settings -User "SYSTEM"

Ключевые параметры:

Изменение существующих задач

Командлет Set-ScheduledTask позволяет обновить любое свойство задачи без пересоздания:

# Изменить время запуска
$newTrigger = New-ScheduledTaskTrigger -Daily -At "03:30"
Set-ScheduledTask -TaskName "Backup-Daily" -TaskPath "\ITfresh\" -Trigger $newTrigger

# Добавить второе действие
$action1 = New-ScheduledTaskAction -Execute "PowerShell.exe" `
    -Argument "-File C:\Scripts\Backup.ps1"
$action2 = New-ScheduledTaskAction -Execute "PowerShell.exe" `
    -Argument "-File C:\Scripts\SendReport.ps1"
Set-ScheduledTask -TaskName "Backup-Daily" -TaskPath "\ITfresh\" `
    -Action $action1, $action2

Для быстрого включения/отключения задач используйте специальные командлеты:

# Отключить задачу
Disable-ScheduledTask -TaskName "Backup-Daily" -TaskPath "\ITfresh\"

# Включить обратно
Enable-ScheduledTask -TaskName "Backup-Daily" -TaskPath "\ITfresh\"

Экспорт и импорт задач (миграция между серверами)

Task Scheduler хранит задачи в формате XML. PowerShell позволяет экспортировать и импортировать их для переноса между серверами:

# Экспорт в XML
Export-ScheduledTask -TaskName "Backup-Daily" -TaskPath "\ITfresh\" |
    Out-File -FilePath C:\Export\Backup-Daily.xml -Encoding UTF8

# Импорт на другом сервере
$xml = Get-Content -Path C:\Export\Backup-Daily.xml -Raw
Register-ScheduledTask -TaskName "Backup-Daily" `
    -TaskPath "\ITfresh\" -Xml $xml -User "SYSTEM"
Совет: Для массовой миграции создайте скрипт, который экспортирует все задачи из определённой папки: Get-ScheduledTask -TaskPath "\ITfresh\*" | ForEach-Object { Export-ScheduledTask -TaskName $_.TaskName -TaskPath $_.TaskPath | Out-File "C:\Export\$($_.TaskName).xml" }

Удаление задач и очистка

Удаление задач выполняется командлетом Unregister-ScheduledTask:

# Удалить конкретную задачу (без подтверждения)
Unregister-ScheduledTask -TaskName "Old-Backup" -TaskPath "\ITfresh\" -Confirm:$false

# Удалить все задачи в папке
Get-ScheduledTask -TaskPath "\ITfresh\" |
    Unregister-ScheduledTask -Confirm:$false
Внимание: Удалённые задачи не попадают в корзину. Перед массовым удалением обязательно экспортируйте задачи в XML — это единственный способ восстановления.

Мониторинг и аудит задач

Для построения отчёта о состоянии всех задач используйте комбинацию командлетов:

# Отчёт о задачах с ошибками за последние 24 часа
$cutoff = (Get-Date).AddDays(-1)
Get-ScheduledTask | ForEach-Object {
    $info = Get-ScheduledTaskInfo -TaskName $_.TaskName -TaskPath $_.TaskPath -ErrorAction SilentlyContinue
    if ($info -and $info.LastTaskResult -ne 0 -and $info.LastRunTime -gt $cutoff) {
        [PSCustomObject]@{
            Task       = $_.TaskName
            Path       = $_.TaskPath
            LastRun    = $info.LastRunTime
            Result     = '0x{0:X}' -f $info.LastTaskResult
            NextRun    = $info.NextRunTime
        }
    }
} | Format-Table -AutoSize

Также полезно отслеживать журнал событий планировщика:

# Последние 20 событий Task Scheduler
Get-WinEvent -LogName "Microsoft-Windows-TaskScheduler/Operational" -MaxEvents 20 |
    Select-Object TimeCreated, Id, Message |
    Format-Table -Wrap

Работа с задачами на удалённых серверах

Модуль ScheduledTasks поддерживает CIM-сессии для удалённого управления:

# Создать CIM-сессию
$session = New-CimSession -ComputerName "SRV-DC01","SRV-FILE01"

# Получить задачи со всех серверов
Get-ScheduledTask -CimSession $session -TaskPath "\ITfresh\" |
    Select-Object PSComputerName, TaskName, State

# Создать задачу на удалённом сервере
Register-ScheduledTask -CimSession $session `
    -TaskName "Remote-Cleanup" -Action $action -Trigger $trigger

# Закрыть сессию
Remove-CimSession $session
Совет: Для серверов, не поддерживающих WinRM, используйте альтернативный способ: Invoke-Command -ComputerName SRV01 -ScriptBlock { Register-ScheduledTask ... } через PowerShell Remoting.

Практический сценарий: цепочка зависимых задач

Часто требуется последовательно выполнить несколько скриптов — например, сначала бэкап, затем очистка, затем отправка отчёта. Реализуем это через одну задачу с несколькими действиями:

$actions = @(
    (New-ScheduledTaskAction -Execute "PowerShell.exe" `
        -Argument "-File C:\Scripts\Step1-Backup.ps1"),
    (New-ScheduledTaskAction -Execute "PowerShell.exe" `
        -Argument "-File C:\Scripts\Step2-Cleanup.ps1"),
    (New-ScheduledTaskAction -Execute "PowerShell.exe" `
        -Argument "-File C:\Scripts\Step3-Report.ps1")
)

$trigger = New-ScheduledTaskTrigger -Daily -At "01:00"
$settings = New-ScheduledTaskSettingsSet `
    -StartWhenAvailable `
    -ExecutionTimeLimit (New-TimeSpan -Hours 4)

Register-ScheduledTask -TaskName "Nightly-Pipeline" `
    -TaskPath "\ITfresh\" `
    -Action $actions -Trigger $trigger `
    -Settings $settings -User "SYSTEM" -RunLevel Highest
Внимание: Действия выполняются строго последовательно, но если первый шаг завершится с ошибкой, последующие всё равно запустятся. Для условной логики лучше использовать единый скрипт-оркестратор.

Устранение типичных ошибок

При работе с планировщиком через PowerShell чаще всего встречаются следующие проблемы:

Совет: Для диагностики включите подробное логирование планировщика: откройте eventvwr.msc → Applications and Services Logs → Microsoft → Windows → TaskScheduler → Operational → Enable Log.

Официальная документация: Microsoft Learn — Windows Server, Microsoft Learn — PowerShell

Часто задаваемые вопросы

Что такое Планировщик заданий Windows: создание и управление задачами через PowerShell?

Планировщик заданий Windows: создание и управление задачами через PowerShell — это важный аспект системного администрирования, который позволяет настроить и оптимизировать работу IT-инфраструктуры. В данной статье подробно рассматриваются все ключевые моменты.

Как правильно настроить Планировщик заданий Windows: создание и управление задачами через PowerShell?

Для корректной настройки Планировщик заданий Windows: создание и управление задачами через PowerShell необходимо следовать пошаговой инструкции, представленной в статье выше. Важно учитывать особенности вашей инфраструктуры и требования безопасности.

Какие типичные ошибки возникают при работе с Планировщик заданий Windows: создание и управление задачами через PowerShell?

Наиболее частые ошибки при работе с Планировщик заданий Windows: создание и управление задачами через PowerShell: некорректная конфигурация, недостаточные права доступа и несовместимость версий. Рекомендуем обратиться к специалистам ITFresh для профессиональной настройки.

IT-аутсорсинг для бизнеса

Автоматизация серверной инфраструктуры — наша специальность

Настроим планировщик заданий, мониторинг, резервное копирование и обслуживание ваших Windows-серверов. ООО «АйТи Фреш» берёт на себя всю рутину, чтобы вы сосредоточились на бизнесе.

12+лет на рынке
200+обслуживаемых серверов
24/7поддержка