使用 powershell (或其他) 在任务计划程序中的任务上切换启用/禁用特定触发器

使用 powershell (或其他) 在任务计划程序中的任务上切换启用/禁用特定触发器

与此问题相关:

Windows Server 采用 UTC 时间,需要任务计划程序根据夏令时转移任务

还有这个问题:

https://stackoverflow.com/questions/11458029/enabling-disabling-tasks-in-task-scheduler-using-a-powershell-script

有没有办法用 powershell 有选择地启用和禁用某些触发器(而不是整个任务)?

我的 UTC 服务器上的任务有两个“每日”触发器,其中一个计划在另一个之后一小时运行。我只希望启用其中一个,并且每年在它们之间切换两次。

任务计划程序似乎没有为触发器指定一个唯一的“名称”,它们只是显示为“每日”

答案1

有很多方法可以与 Task Scheduler 交互。例如,您可以使用 Schedule.Service COM 对象。

$TaskScheduler = New-Object -COMObject Schedule.Service
$TaskScheduler.Connect()
$TaskFolder = $TaskScheduler.GetFolder("\") # If your task is in the root "folder"
$Task = $TaskFolder.GetTask("The Name Of Your Task")
$Triggers = $Task.Definition.Triggers
$FirstTrigger = $Triggers.Item(1)

这些触发器对象各自都有一个 Enabled 属性。我认为这里的数组索引从 1 开始,这很奇怪,但无论如何。

编辑:哦是的,RegisterTaskDefinition() 方法应该保存您的更改。

答案2

我想禁用在用户登录时运行的触发器。 借鉴其他答案,这是一个完整的示例。

$ts = New-Object -Com Schedule.Service
$ts.Connect()
$dir = $ts.GetFolder('\')
$task = $dir.GetTask("ENTER NAME HERE")
$def = $task.Definition
# Logon trigger -> type 9
$disable = $def.Triggers | ? {$_.Type -eq 9}
$disable.Enabled = $false
# 4 means update an existing task
$dir.RegisterTaskDefinition($task.Name, $def, 4, $null, $null, $null)

相关内容