I want to set the value for the option "Stop task if runs longer than" in the windows schedule task Trigger tab using Powershell.
Already tried with /DU switch but it is not working.
Below is the screenshot for the same.
let me know in case of any further information is required.
@TobyU: I tried your suggestion as well but it is not setting up the required value. Below is the screenshot for your reference.
Thank you in advance.
4 Answers
I'm using Windows 10 Pro and PowerShell 7 and the following works well for me.
Creating a new task:
# 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 $taskActionFor updating the trigger of an existing task the solution proposed by @TobyU worked well for me:
# 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 $taskHowever, you can also completely replace the old trigger with a new one:
# 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 You can set it for the whole task at once:
$task = Get-ScheduledTask -TaskName "MyTask"
$task.Settings.ExecutionTimeLimit = "PT3H"
Set-ScheduledTask $taskStops after 3 hours in the above example.
This is how you set it only for a specific trigger:
$task = Get-ScheduledTask -TaskName "MyTask"
$task.Triggers[0].ExecutionTimeLimit = "PT3H"
Set-ScheduledTask $taskWhere Triggers[0] is the specific trigger you want to adjust since $task.Triggers returns an array with all the available trigger objects for the specific task.
Create Schedule Task Remotely
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
} Looks like your format for the ExecutionTimeLimit may need tweaking. In my case, I wanted the setting removed (ie the tickbox unticked). I couldn't figure this out, but using the following format for ExecutionTimeLimit did work, so I could set it to a far away value: d.hh:mm:ss, ie 1000 days:
$settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit 1000.00:00:00
Register-ScheduledTask -TaskName 'name' -Action $action -Trigger $trigger -Settings $settings 1