Как настроить "остановить задачу, если она выполняется дольше, чем" для schtasks.exe

Я хочу установить значение для параметра "Остановить задачу, если она выполняется дольше, чем" на вкладке "Запуск задачи расписания Windows" с помощью Powershell.

Уже пробовал с ключом /DU, но он не работает.

Ниже скриншот для того же. Настройки триггера расписания задач Windows

дайте мне знать, если потребуется дополнительная информация.

@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

}
Другие вопросы по тегам