与此问题相关:
Windows Server 采用 UTC 时间,需要任务计划程序根据夏令时转移任务
还有这个问题:
有没有办法用 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)