Как настроить "остановить задачу, если она выполняется дольше, чем" для schtasks.exe
Я хочу установить значение для параметра "Остановить задачу, если она выполняется дольше, чем" на вкладке "Запуск задачи расписания Windows" с помощью Powershell.
Уже пробовал с ключом /DU, но он не работает.
дайте мне знать, если потребуется дополнительная информация.
@TobyU: Я попробовал и ваше предложение, но оно не устанавливает требуемое значение. Ниже скриншот для вашей справки.
Заранее спасибо.
4 ответа
Вы можете установить его для всей задачи сразу:
$task = Get-ScheduledTask -TaskName "MyTask"
$task.Settings.ExecutionTimeLimit = "PT3H"
Set-ScheduledTask $task
Останавливается через 3 часа в приведенном выше примере.
Вот как вы устанавливаете его только для определенного триггера:
$task = Get-ScheduledTask -TaskName "MyTask"
$task.Triggers[0].ExecutionTimeLimit = "PT3H"
Set-ScheduledTask $task
куда Triggers[0]
конкретный триггер, который вы хотите настроить, так как $task.Triggers
возвращает массив со всеми доступными триггерными объектами для конкретной задачи.
Я использую Windows 10 Pro и PowerShell 7, и мне хорошо подходят следующие варианты.
Создание новой задачи:
# Creating a task with multiple triggers and different execution limits
$taskName = "MyTask"
$trigger1 = New-ScheduledTaskTrigger -Once -At "2021-05-10 12:00:00"
$trigger1.ExecutionTimeLimit = "PT20M"
$trigger2 = New-ScheduledTaskTrigger -Once -At "2021-05-13 17:30:30"
$trigger2.ExecutionTimeLimit = "PT50M"
$taskTriggers = @(
$trigger1,
$trigger2
)
$taskAction = New-ScheduledTaskAction -Execute "notepad.exe"
Register-ScheduledTask -TaskName $taskName -Trigger $taskTriggers -Action $taskAction
Для обновления триггера существующей задачи у меня хорошо сработало решение, предложенное @TobyU:
# Updating execution limits of a task that already exists
$taskName = "MyTask"
$task = Get-ScheduledTask -TaskName $taskName
$task.Settings.ExecutionTimeLimit = "PT30S" # Global limit
$task.Triggers[0].ExecutionTimeLimit = "PT10S" # Limit for trigger 1
$task.Triggers[1].ExecutionTimeLimit = "PT15S" # Limit for trigger 2
Set-ScheduledTask $task
Однако вы также можете полностью заменить старый триггер новым:
# Completely replacing all triggers with new one of an already existing task
$taskName = "MyTask"
$trigger = New-ScheduledTaskTrigger -Once -At "2021-05-17 17:17:17"
$trigger.ExecutionTimeLimit = "PT42M"
Set-ScheduledTask -TaskName $taskName -Trigger $trigger
Похоже, ваш формат для ExecutionTimeLimit может нуждаться в настройке. В моем случае я хотел, чтобы настройка была удалена (т.е. флажок снят). Я не мог понять это, но использование следующего формата для ExecutionTimeLimit действительно сработало, поэтому я мог установить его на большое значение: d.hh:mm:ss, то есть 1000 дней:
$settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit 1000.00:00:00
Register-ScheduledTask -TaskName 'name' -Action $action -Trigger $trigger -Settings $settings
Создание задачи расписания удаленно
Invoke-Command -ComputerName Computername -Scriptblock
{
$action = New-ScheduledTaskAction -Execute 'C:\app.exe” '
$trigger = New-ScheduledTaskTrigger -Daily -At 10am -RandomDelay (New-TimeSpan - Minutes 480)
$principal = New-ScheduledTaskPrincipal -GroupID "BUILTIN\Administrators" -
RunLevel Highest
Register-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -
TaskName "Schedule_task_name" -Description "Task Description"
$Task = Get-ScheduledTask -TaskName "Schedule_task_name"
$Task.Triggers[0].ExecutionTimeLimit= "PT30M"
Set-ScheduledTask $Task
}