В связи с этим вопросом:

Windows Server в UTC, нужен планировщик задач для переключения задач на летнее время

и этот вопрос:

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

Есть ли способ выборочно включать и отключать определенные триггеры (а не всю задачу) с помощью PowerShell?

У меня есть два триггера «Ежедневно» для моей задачи на моем сервере UTC, один из которых должен запускаться через час после другого. Я хочу, чтобы был включен только один, и я хочу переключаться между ними дважды в год.

Планировщик заданий не имеет уникального «имени» для триггеров, они просто отображаются как «Ежедневно».

answer

Есть много способов взаимодействия с планировщиком заданий. Например, вы можете использовать COM-объект Schedule.Service.

$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 () должен сохранить ваши изменения.

Я хотел отключить триггер, который запускается при входе пользователя в систему. Взяв другой ответ, вот полный пример.

$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)