如何为 schtasks.exe 配置 "stop the task if it runs longer than"

how to configure "stop the task if it runs longer than" for schtasks.exe

我想使用 Powershell 在 windows 计划任务触发器选项卡中设置选项 "Stop task if runs longer than" 的值。

已尝试使用 /DU 开关,但它不起作用。

下面是相同的屏幕截图。

如果需要任何进一步的信息,请告诉我。

@TobyU:我也试过你的建议,但没有设置所需的值。以下是屏幕截图供您参考。

提前致谢。

您可以一次为整个任务设置它:

$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 returns 一个包含特定任务的所有可用触发器对象的数组。

远程创建计划任务

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

}

我正在使用 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