Планировщик задач в windows server 2016

Моё почтение.
  • Remove From My Forums
  • Вопрос

  • Моё почтение.

    Упал планировщик заданий на сервере. При запуске сообщает, что планировщик не запущен на этом компьютере и выдаёт ошибку 1067. Проверка sfc /scannow результатов не дала. Директорию Shedule из реестра удалял и восстанавливал. В сервисах
    стоит автоматический запуск. При попытке запустить всё та же ошибка. Возможно ли как то переустановить планировщик? удалив его полностью. Или перенести с другого сервера. В логах системы ничего конктреного, «не удалось запустить уже
    6 раз» и всё в таком духе. Последние обновления скачены и установлены. Он вообще отказывается реагировать.

    С наилучшими пожеланиями.

Ответы

  • Оставлю решение, на случай если кому либо понадобится.

    Скорее всего поломалась какая-то задача планировщика. Чтобы это проверить идём в редактор реестра и находим раздел Tree: HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionScheduleTaskCacheTree. Переименовываем
    Tree в Tree.old и проверяем, запускается ли планировщик. Если запускается, переименовываем Tree.old обратно в Tree и ищем неработающую задачу таким же образом: добавлением в конец имени «.old», да в
    принципе чего угодно. Когда находим неработающую задачу — удаляем её из ветки и планировщик будет работать нормально.

    В случае, если после переименования ветки Tree планировщик не запускается — значит дело в другом и этот метод не сработает.

    • Помечено в качестве ответа

      16 марта 2020 г. 7:46

Большинство пользователей и администраторов привыкли использовать графический интерфейс консоли Taskschd.msc для создания заданий планировщика Windows (Task Scheduler), запускаемых по расписанию. Однако в различных скриптах и автоматизируемых задачах для создания заданий планировщика гораздо удобнее использовать возможности PowerShell. В этой статье мы покажем, как создавать и управлять заданиями планировщика Windows из PowerShell.

Содержание:

  • Управление заданиями Task Scheduler с помощью PowerShell
  • Как создать задание планировщика с помощью PowerShell?
  • Получение информации и запуск заданий планировщика из PowerShell
  • Экспорт и импорт заданий планировщика в XML файл

Управление заданиями Task Scheduler с помощью PowerShell

В Windows 10/Windows Server 2016 для управления задачами в планировщике используется PowerShell модуль ScheduledTasks. Список командлетов в модуле можно вывести так:

Get-Command -Module ScheduledTasks

  • Disable-ScheduledTask
  • Enable-ScheduledTask
  • Export-ScheduledTask
  • Get-ClusteredScheduledTask
  • Get-ScheduledTask
  • Get-ScheduledTaskInfo
  • New-ScheduledTask
  • New-ScheduledTaskAction
  • New-ScheduledTaskPrincipal
  • New-ScheduledTaskSettingsSet
  • New-ScheduledTaskTrigger
  • Register-ClusteredScheduledTask
  • Register-ScheduledTask
  • Set-ClusteredScheduledTask
  • Set-ScheduledTask
  • Start-ScheduledTask
  • Stop-ScheduledTask
  • Unregister-ClusteredScheduledTask
  • Unregister-ScheduledTask

powershell командлеты из модуля ScheduledTasks

Совет. Ранее в Windows для создания и управления заданиями планировщика в основном использовались встроенная консольная утилита schtasks.exe.

Как создать задание планировщика с помощью PowerShell?

В современных версиях PowerShell (начиная с PowerShell 3.0 в Windows Server 2012/Windows 8) для создания заданию планировщика нужно использовать командлеты New-ScheduledTaskTrigger и Register-ScheduledTask.

Предположим, наша задача создать задание планировщика, которое должно запускаться при загрузке компьютера (или в определенное время) и выполнять какой-то PowerShell скрипт. Создадим задание планировщика с именем StartupScript_PS. Данное задание должно каждый день в 10:00 запускать PowerShell скрипт, хранящийся в файле C:PSStartupScript.ps1 из-под учетной записи системы (SYSTEM). Задание будет выполняться с повышенными привилегиями (галка “Run with highest privileges”).

$Trigger= New-ScheduledTaskTrigger -At 10:00am -Daily
$User= "NT AUTHORITYSYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:PSStartupScript.ps1"
Register-ScheduledTask -TaskName "StartupScript_PS" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force

Если задание успешно создано, появится надпись Ready.

создать задание планировщика с помощью Register-ScheduledTask

Теперь ваш PowerShell скрипт будет запускаться по указанному расписанию. Если на вашем компьютере настроена PowerShell Execution Policy, блокирующая запуск скриптов PS1, вы можете запустить скрипт их планировщика с параметром –Bypass.

Используйте такую строку при создании нового задания:

$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument “-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:PSStartupScript.ps1"

Совет. Если нужно, чтобы задание запускалось каждый раз при загрузке компьютера, первая строка должна быть такой:
$Trigger= New-ScheduledTaskTrigger -AtStartup

Если нужно выполнять задание при входе пользователя:
$Trigger= New-ScheduledTaskTrigger –AtLogo
n

Откройте консоль
Taskschd.msc
и проверьте, что проверьте, что в Task Scheduler Library появилось новое задание планировщика.

консоль Task Scheduler с новым заданием планировщика

В версии Powershell 2.0 (Windows 7, Windows Server 2008 R2) для создания повторяющегося задания (ScheduledJob) из PowerShell необходимо воспользоваться COM интерфейсом Schedule.Service (либо обновите версию PowerShell). В этом примере мы создадим задание планировщика, которое во время запускает определённый файл с PowerShell скриптом во время загруки. Задание выполняется с правами системы (System).

$TaskName = "NewPsTask"
$TaskDescription = "Запуск скрипта PowerShell из планировщика"
$TaskCommand = "c:windowssystem32WindowsPowerShellv1.0powershell.exe"
$TaskScript = "C:PSStartupScript.ps1"
$TaskArg = "-WindowStyle Hidden -NonInteractive -Executionpolicy unrestricted -file $TaskScript"
$TaskStartTime = [datetime]::Now.AddMinutes(1)
$service = new-object -ComObject("Schedule.Service")
$service.Connect()

$rootFolder = $service.GetFolder("")
$TaskDefinition = $service.NewTask(0)
$TaskDefinition.RegistrationInfo.Description = "$TaskDescription"
$TaskDefinition.Settings.Enabled = $true
$TaskDefinition.Settings.AllowDemandStart = $true
$triggers = $TaskDefinition.Triggers
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa383915(v=vs.85).aspx
$trigger = $triggers.Create(8)

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

Вы можете вывести список всех активных заданий планировщика в Windows с помощью команды:

Get-ScheduledTask -TaskPath | ? state -ne Disabled

Чтобы получить информацию о конкретном задании:

Get-ScheduledTask CheckServiceState_PS| Get-ScheduledTaskInfo

LastRunTime : 4/6/2021 10:00:00 AM
LastTaskResult : 267011
NextRunTime : 4/7/2021 10:00:00 AM
NumberOfMissedRuns : 0
TaskName : CheckServiceState_PS
TaskPath : 
PSComputerName :

информация о запуске задания Get-ScheduledTaskInfo

Вы можете отключить это задание:

Get-ScheduledTask CheckServiceState_PS | Disable-ScheduledTask

Чтобы включить задание:

Get-ScheduledTask CheckServiceState_PS | Enable-ScheduledTask

Чтобы запустить задание немедленно (не дожидаясь расписания), выполните:

Start-ScheduledTask CheckServiceState_PS

отключить/включить/запустить задание планировщика с помощью PowerShell

Чтобы полностью удалить задание из Task Scheduler:

Unregister-ScheduledTask -TaskName CheckServiceState_PS

Если нужно изменить имя пользователя, из-под которого запускается задание и, например, режим совместимости, используйте командлет Set-ScheduledTask:

$task_user = New-ScheduledTaskPrincipal -UserId 'winitprokbuldogov' -RunLevel Highest
$task_settings = New-ScheduledTaskSettingsSet -Compatibility 'Win7'
Set-ScheduledTask -TaskName CheckServiceState_PS -Principal $task_user -Settings $task_settings

При появлении ошибки “Set-ScheduledTask : No mapping between account names and security IDs was done” проверьте, что у вас указано правильное имя пользователя.

Set-ScheduledTask : No mapping between account names and security IDs was done

Экспорт и импорт заданий планировщика в XML файл

С помощью PowerShell можно экспортировать любое задания планировщика в текстовый XML файл для распространения на другие компьютеры. Вы можете экспортировать задание из графического интерфейса Task Scheduler или из консоли PowerShell.

Следующая команда экспортирует задание StartupScript_PS в файл StartupScript_PS.xml:

Export-ScheduledTask "StartupScript_PS" | out-file c:tempStartupScript_PS.xml

Export-ScheduledTask - импорт задания планировщика в xml файла

Командлет Export-ScheduledTask не доступен в PowerShell 2.0. Поэтому в Windows 7 / 2008 R2 для экспорта настроек задания в XML файл лучше воспользоваться встроенной утилитой schtasks, вывод которой нужно перенаправить в текстовый файл:

schtasks /query /tn "NewPsTask" /xml >> "c:psNewPsTask.xml"

После того, как настройки задания планировщика экспортированы в XML файл, его можно импортировать на любой другой компьютер с помощи графической консоли, SchTasks.exe или PowerShell.

Воспользуйте командлетом PowerShell Register-ScheduledTask чтобы параметры задания из файла и зарегистрировать его:

Register-ScheduledTask -Xml (Get-Content “\Server1publicNewPsTask.xml” | out-string) -TaskName "NewPsTask"

Примечание. В PowerShell 2.0 (Windows 7/Server 2008 R2) импорт задания также проще выполнить с помощью утилиты schtasks. Первая команда создаст новое задание. Вторая – сразу запустит его (не дожидаясь срабатывания триггера).

schtasks /create /tn "NewPsTask" /xml "\Server1publicNewPsTask.xml " /ru corpaaivanov /rp Pa$$w0rd
schtasks /Run /TN "NewPsTask"

Обратите внимание, что в этом примере указаны данные учетной записи, из-под которой будет запускаться задание. Если имя и пароль учетной записи не указаны, то т.к. они не хранятся в задании, они будут запрошены при импорте.

985f518753bdb8eb684f2fd7a9a9c8f3.png
Время 10-50, а толку ноль :(
Сервис запущен — задания не выполняются.
Журнал пустой.
На 7 без проблем всё это дело работает…
Есть идеи?

В общем бред, если ставить однократно и повторы — то работает по повторам, если ежедневно и повторы — то уже не работает (в 7 работало)


  • Вопрос задан

    более трёх лет назад

  • 2560 просмотров

Пригласить эксперта

Это известный, хоть и малообсуждаемый баг 2016 сервера. Обещают исправить в осеннем апдейте.
Баг заключается в том, что автоповтор перестаёт работать после ребута сервера.
Костыль — перевести дату первого запуска на будущее значение, чтобы система его заново стартонула и пошла обрабатывать. И таким образом переводить стрелки задач после каждого ребута.

Подробно описано:
https://answers.microsoft.com/en-us/windows/forum/…


  • Показать ещё
    Загружается…

07 февр. 2023, в 23:29

3000 руб./за проект

07 февр. 2023, в 23:29

51000 руб./за проект

07 февр. 2023, в 23:02

2000 руб./за проект

Минуточку внимания

I need to schedule a Task inside of my Windows server 2016 to run every minute, how would one accomplish that?
I’ve tried Task Scheduler->Create Task, but the minimum is every 5 minutes,
Is it to possible to schedule task (run exe) every minute ?
any ideas? thanks!

asked Apr 10, 2018 at 8:58

georgetovrea's user avatar

You can set 1 minute frequency through task scheduler itself. The option does not appear in the dropdown list, but you can edit the text and it will accept a variety of values from 1 minute upwards.

answered Apr 11, 2018 at 10:11

MisterSmith's user avatar

MisterSmithMisterSmith

2,7741 gold badge10 silver badges13 bronze badges

1

I need to schedule a Task inside of my Windows server 2016 to run every minute, how would one accomplish that?
I’ve tried Task Scheduler->Create Task, but the minimum is every 5 minutes,
Is it to possible to schedule task (run exe) every minute ?
any ideas? thanks!

asked Apr 10, 2018 at 8:58

georgetovrea's user avatar

You can set 1 minute frequency through task scheduler itself. The option does not appear in the dropdown list, but you can edit the text and it will accept a variety of values from 1 minute upwards.

answered Apr 11, 2018 at 10:11

MisterSmith's user avatar

MisterSmithMisterSmith

2,7741 gold badge10 silver badges13 bronze badges

1

Profile picture for user Олег

Windows Server

Столкнулся с невозможностью настроить периодичность резервного копирование реже одного раза в сутки в Windows Server Backup. ОС Windows Server 2016. Проблему легко можно решить через Task Scheduler.

Я настроил резервное копирование через Windows Server Backup с периодичностью раз в сутки:

Windows Server 2016 — настройка Windows Server Backup

Теперь мне нужно изменить частоту резервного копирования на раз в неделю. Через Windows Server Backup этого сделать не удастся. Запускаем Task Scheduler:

backup

Заходим в Task Scheduler Library > Microsoft > Windows > Backup.

Видим расписание нашего резервного копирования. Каждый день в 1:00. Редактируем:

backup

Переходим в триггеры, редактируем.

backup

Легко устанавливаем периодичность раз в неделю по воскресеньям в 0:10. Ok.

backup

Указываем логин-пароль пользователя, от имени которого настраивали резервное копирование. OK. Готово

Примечательно, что если посмотреть в оснастке Windows Server Backup, то он всё ещё считает, что бэкап будет каждый день.

backup

Однако если посмотреть туда же через несколько дней, то увидим следующее:

backup

Видно, что первый бэкап сделался 3-го числа, но уже 9-е, а Oldest copy так и стоит 3-е число. Бэкап будет запущен согласно расписанию в Task Scheduler.

Понравилась статья? Поделить с друзьями:
  • Планировщик заданий выбранная задача 0 больше не существует windows 7
  • Планировщик задач в windows server 2008
  • Планировщик заданий в windows server 2019
  • Планировщик задач в windows server 2003 как открыть
  • Планировщик заданий windows каждые 5 минут