Имеем Windows Server 2012 R2. Задача — автоматически перезагружать сервер каждый понедельник в 5 утра. Приступаем.
Запускаем Планировщик заданий, создаём в нём папку «reboot»:
Делаем Create Basic Task… Запускается мастер:
Указываем Name, Description:
Кликаем Next:
Выбираем период Weekly. Next:
Указываем начало — ближайший понедельник 5 утра. Ставим галку Monday. Next:
Выбираем Start a program. Next:
В Program/script: пишем:
%SYSTEMROOT%\System32\shutdown.exe
В Add arguments (optional):
/r /f /t 90 /d p:0:0 /c "Перезапуск по понедельникам. Отмена: shutdown.exe /a"
Где:
- /r — перезагрузка,
- /f — принудительное закрытие всех приложений,
- /t 90 — время ожидания до начала перезагрузки 90 сек,
- /d p:0:0 — причины перезагрузки для журнала. В данном случае, мы указали: p — запланированная перезагрузка, 0:0 — «Other (planned)»,
- /c комментарий в свободной форме длинной не более 512 символов. Комментарий будет показываться юзерам 90 секунд. За это время можно отменить перезагрузку командой shutdown.exe /a.
Список параметров и причин перезагрузки можно посмотреть shutdown.exe /?
Мастер не доделали, кликаем Finish. Создаётся задача — редактируем её.
Ставим Run whether user is logged on or not. Добавим галку Run with highest privileges. Ok:
Нас попросят ввести имя пользователя, от имени которого будет выполняться задание. И пароль. Готово:
Сам пока не проверял результатов. В ближайший понедельник посмотрим…
P.S.
Две недели прошло — шедулер нормально перезагружает сервер по понедельникам.
microsoft-windows:windows-server-2012-r2:adds:how-to-use-managed-service-accounts-msa-and-group-managed-service-account-gmsa:how-to-create-a-windows-scheduler-task-on-behalf-of-msa-gmsa-in-powershell
Содержание
Как создать задание Планировщика Windows Task Scheduler от имени учётной записи MSA/gMSA в PowerShell
Графическая оболочка Планировщика заданий Windows Task Scheduler в ОС Windows Server 2012 R2 не умеет работать с учётными записями MSA/gMSA. Однако для настройки задания планировщика Windows, которое должно выполняться от имени сервисной учётной записи MSA/gMSA, мы можем воспользоваться возможностями оболочки PowerShell.
Создание простого задания
Запустим оболочку PowerShell с правами Администратора и создадим простое задание планировщика Windows для запуска некоторого PS-скрипта с ежедневным выполнением, например в 23:00:
$Action = New-ScheduledTaskAction -Execute "PowerShell.exe" ` -Argument "-NoProfile -command `"D:\FBInst1\Tools\FBBases-Backup.ps1`"" $Trigger = New-ScheduledTaskTrigger -Daily -At 23:00 $SvcUser = New-ScheduledTaskPrincipal -UserID KOM\s-S11$ -LogonType Password Register-ScheduledTask -TaskName "Firebird DBs (Instance1) Backup" ` -Action $Action -Trigger $Trigger -Principal $SvcUser
Откроем графическую консоль управления планировщиком Windows и проверим корректность созданного задания.
Изменение созданного задания
В случае необходимости изменения созданного задания с использованием учётной записи MSA/gMSA не нужно пытаться изменить здание через графическую консоль, так как это приведёт к запросам аутентификации для учётной записи gMSA и ошибкам сохранения задания. Изменить созданное задание можно с помощью PowerShell. Например, чтобы изменить время запуска задания можем выполнить следующий код:
$Trigger = New-ScheduledTaskTrigger -Daily -At 23:05 Set-ScheduledTask -TaskName "Firebird DBs (Instance1) Backup" -Trigger $Trigger
Задания со сложным расписанием
Рассмотрим ещё один пример создания задачи планировщика, но уже с более сложным расписанием выполнения. Например, нам нужно, чтобы задание выполнялось дважды в день в определённое время. В этом случае в качестве значения триггера используется массив объектов, созданных командлетом New-ScheduledTaskTrigger. Например, задача, выполняемая ежедневно утром и вечером в определённое время может быть создана так:
$Action = New-ScheduledTaskAction -Execute "C:\Programms\MyProgramm.exe" $Trigger = @( $(New-ScheduledTaskTrigger -Daily -At 8:30), $(New-ScheduledTaskTrigger -Daily -At 20:30) ) $SvcUser = New-ScheduledTaskPrincipal -UserID DOMAIN\gMSAAccount$ -LogonType Password $TDescription = 'Описание моей задачи' Register-ScheduledTask -TaskName "My Task" -TaskPath "\My Tasks" -Action $Action ` -Trigger $Trigger -Principal $SvcUser -Description $TDescription
Если требуется постоянный цикличный запуск задания, например, каждые 5 минут, то значение триггера можно задать следующим образом:
$Trigger = New-ScheduledTaskTrigger ` -Once ` -At (Get-Date) ` -RepetitionInterval (New-TimeSpan -Minutes 5) ` -RepetitionDuration ([System.TimeSpan]::MaxValue)
Ещё один пример указания триггера с условием, что задание должно выполняться в определённое время, но только по рабочим дням недели:
$Trigger = New-ScheduledTaskTrigger -Weekly ` -DaysOfWeek Monday,Tuesday,Wednesday,Thursday,Friday -At 9:10
Триггер -AtStartup
При создании заданий Планировщика с триггером по запуску ОС (-AtStartup) может потребоваться дополнительно установить в свойствах триггера небольшую задержку по времени для того, чтобы дать возможность завершения инициализации механизмов доменной аутентификации. Пример такой настройки рассмотрен здесь.
# Добавляем в первый триггер задания Планировщика 3-минутную задержку перед запуском # А также отключаем ограничение времени выполнения задания # Формат указания длительности времени https://en.wikipedia.org/wiki/ISO_8601#Durations # $Task.Triggers[0].Delay = "PT3M" $Task.Settings.ExecutionTimeLimit = "PT0S" $Task | Set-ScheduledTask
Проверено на следующих конфигурациях:
Версия ОС |
---|
Windows Server 2012 R2 Standard EN (6.3.9600) |
Автор первичной редакции:
Алексей Максимов
Время публикации: 06.06.2019 20:51
· Последнее изменение: 13.10.2019 14:02 —
Алексей Максимов
Большинство пользователей и администраторов привыкли использовать графический интерфейс консоли 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
Совет. Ранее в Windows для создания и управления заданиями планировщика в основном использовались встроенная консольная утилита schtasks.exe.
Как создать задание планировщика с помощью PowerShell?
В современных версиях PowerShell (начиная с PowerShell 3.0 в Windows Server 2012/Windows для создания заданию планировщика нужно использовать командлеты New-ScheduledTaskTrigger и Register-ScheduledTask.
Предположим, наша задача создать задание планировщика, которое должно запускаться при загрузке компьютера (или в определенное время) и выполнять какой-то PowerShell скрипт. Создадим задание планировщика с именем StartupScript_PS. Данное задание должно каждый день в 10:00 запускать PowerShell скрипт, хранящийся в файле C:\PS\StartupScript.ps1 из-под учетной записи системы (SYSTEM). Задание будет выполняться с повышенными привилегиями (галка “Run with highest privileges”).
$Trigger= New-ScheduledTaskTrigger -At 10:00am -Daily
$User= "NT AUTHORITY\SYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\PS\StartupScript.ps1"
Register-ScheduledTask -TaskName "StartupScript_PS" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force
Если задание успешно создано, появится надпись Ready.
Теперь ваш PowerShell скрипт будет запускаться по указанному расписанию. Если на вашем компьютере настроена PowerShell Execution Policy, блокирующая запуск скриптов PS1, вы можете запустить скрипт их планировщика с параметром –Bypass.
Используйте такую строку при создании нового задания:
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument “-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:\PS\StartupScript.ps1"
Совет. Если нужно, чтобы задание запускалось каждый раз при загрузке компьютера, первая строка должна быть такой:
$Trigger= New-ScheduledTaskTrigger -AtStartup
Если нужно выполнять задание при входе пользователя:
$Trigger= New-ScheduledTaskTrigger –AtLogo
n
Откройте консоль
Taskschd.msc
и проверьте, что проверьте, что в Task Scheduler Library появилось новое задание планировщика.
В версии Powershell 2.0 (Windows 7, Windows Server 2008 R2) для создания повторяющегося задания (ScheduledJob) из PowerShell необходимо воспользоваться COM интерфейсом Schedule.Service (либо обновите версию PowerShell). В этом примере мы создадим задание планировщика, которое во время запускает определённый файл с PowerShell скриптом во время загруки. Задание выполняется с правами системы (System).
$TaskName = "NewPsTask"
$TaskDescription = "Запуск скрипта PowerShell из планировщика"
$TaskCommand = "c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe"
$TaskScript = "C:\PS\StartupScript.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-ScheduledTask CheckServiceState_PS | Disable-ScheduledTask
Чтобы включить задание:
Get-ScheduledTask CheckServiceState_PS | Enable-ScheduledTask
Чтобы запустить задание немедленно (не дожидаясь расписания), выполните:
Start-ScheduledTask CheckServiceState_PS
Чтобы полностью удалить задание из Task Scheduler:
Unregister-ScheduledTask -TaskName CheckServiceState_PS
Если нужно изменить имя пользователя, из-под которого запускается задание и, например, режим совместимости, используйте командлет Set-ScheduledTask:
$task_user = New-ScheduledTaskPrincipal -UserId 'winitpro\kbuldogov' -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” проверьте, что у вас указано правильное имя пользователя.
Экспорт и импорт заданий планировщика в XML файл
С помощью PowerShell можно экспортировать любое задания планировщика в текстовый XML файл для распространения на другие компьютеры. Вы можете экспортировать задание из графического интерфейса Task Scheduler или из консоли PowerShell.
Следующая команда экспортирует задание StartupScript_PS в файл StartupScript_PS.xml:
Export-ScheduledTask "StartupScript_PS" | out-file c:\temp\StartupScript_PS.xml
Командлет Export-ScheduledTask не доступен в PowerShell 2.0. Поэтому в Windows 7 / 2008 R2 для экспорта настроек задания в XML файл лучше воспользоваться встроенной утилитой schtasks, вывод которой нужно перенаправить в текстовый файл:
schtasks /query /tn "NewPsTask" /xml >> "c:\ps\NewPsTask.xml"
После того, как настройки задания планировщика экспортированы в XML файл, его можно импортировать на любой другой компьютер с помощи графической консоли, SchTasks.exe или PowerShell.
Воспользуйте командлетом PowerShell Register-ScheduledTask чтобы параметры задания из файла и зарегистрировать его:
Register-ScheduledTask -Xml (Get-Content “\\Server1\public\NewPsTask.xml” | out-string) -TaskName "NewPsTask"
Примечание. В PowerShell 2.0 (Windows 7/Server 2008 R2) импорт задания также проще выполнить с помощью утилиты schtasks. Первая команда создаст новое задание. Вторая – сразу запустит его (не дожидаясь срабатывания триггера).
schtasks /create /tn "NewPsTask" /xml "\\Server1\public\NewPsTask.xml " /ru corp\aaivanov /rp Pa$$w0rd
schtasks /Run /TN "NewPsTask"
Обратите внимание, что в этом примере указаны данные учетной записи, из-под которой будет запускаться задание. Если имя и пароль учетной записи не указаны, то т.к. они не хранятся в задании, они будут запрошены при импорте.
This article describes how to create scheduled tasks on a Microsoft® Windows® server.
Perform the following steps to access the Task Scheduler:
-
Open the Windows Run command by pressing the Windows key and r together.
-
In the Run window, enter taskschd.msc and press Enter.
Perform the following steps to create a scheduled task:
-
Optional If a folder for custom tasks does not exist already, create one to separate automatically
created tasks from custom tasks. Right-click Task Scheduler Library in the left-hand pane, click
New Folder, enter a name such as My Custom Tasks, and click OK. -
To select the folder in which to store the task, such as the previously created
My Custom Tasks folder, click the folder. -
To create a new task, right-click the chosen folder and click Create Basic Task to launch the
Create Basic Task Wizard.Note: For more advanced options, choose Create Task, which provides additional tools beyond
the common options. -
On the first screen, enter a Name and Description and then click Next.
-
On the Trigger screen, choose when you want the task to run. You can trigger tasks on a
schedule or by a computer event, such as when Windows starts or when a user logs on. Click Next. -
Depending on the trigger you choose, the next screen might ask you for more trigger configuration details,
such as recurrence frequency or request details about the event that triggers the task. Click Next. -
Choose an action to perform after the trigger event occurs. You can set an action to launch a program
or script, send an email notification, or display a message to users. Click Next. -
Configure the specifics of the action such as the email address or the application you want to launch
and click Next. -
Review the details of the task and click Finish to finalize task creation.
Updated 2 months ago