首页 > 解决方案 > 如何删除每个任务的所有任务触发器?

问题描述

如何完全删除每个任务的所有任务触发器。下面的脚本只为一项任务一次删除一个任务触发器。剧本由托尼·欣克尔编写。

$taskName = "MyTask"
$triggerToDelete = 1 (THIS PART, how do I write ALL)

# connect to Task Scheduler:
$service = New-Object -ComObject Schedule.Service
$service.Connect($env:COMPUTERNAME)

# pick a specific task in a container:
$folder = $service.GetFolder('\')
$task = $folder.GetTask($taskName)

# get task definition and change it:
$definition = $task.Definition
$definition.Triggers.Remove($triggerToDelete)

# write back changed task definition:
# 4 = Update
$folder.RegisterTaskDefinition($task.Name, $definition, 4, $null, $null, $null)

标签: powershell

解决方案


您需要将所有触发器向后枚举并一一删除。请注意,触发索引是从 1 开始的,而不是从 0 开始的。更新:添加了枚举所有任务的代码。

$service = New-Object -ComObject Schedule.Service
$service.Connect($env:COMPUTERNAME)

$folder = $service.GetFolder('\')

$tasks = $folder.gettasks(0)

foreach ($t in $tasks)
{
    $definition = $t.Definition

    $triggersCount = $definition.Triggers.Count

    for($id=$triggersCount; $id -gt 0; $id--){
      $definition.Triggers.Remove($id)   
    }

    $folder.RegisterTaskDefinition($t.Name, $definition, 4, $null, $null, $null)
}

推荐阅读