You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell禁用任务计划触发器无效,寻求解决方法

任务计划程序触发器修改不生效的问题及解决办法

问题说明

公司新软件与任务计划程序中的现有任务存在交互问题,编写PowerShell脚本调整设置时,唯独无法修改登录触发器的启用状态:能正常获取触发器的全部信息,但修改操作仅在脚本内显示生效,任务计划程序中仍显示触发器“已启用”,且触发器会正常触发任务。

已尝试的代码

COM对象实现方式

$taskName = 'TEST'
$triggerToDelete = 1
$computerName = "LAPTOP"
$TaskScheduler = New-Object -com("Schedule.Service")
$TaskScheduler.Connect() 
$TaskFolder = $TaskScheduler.GetFolder("\")

$Task = $TaskFolder.GetTask($taskName)
$Triggers = $Task.Definition.Triggers
$FirstTrigger = $Triggers.Item(1)
# 获取任务定义并修改
$definition = $task.Definition
$definition.Triggers.Item(1).enabled = $false

PowerShell Cmdlet实现方式

$Task = Get-ScheduledTask -TaskName 'TEST' 
$Trigger = $Task.Triggers[0]
$Trigger.Enabled = $false
$Trigger

出现的现象

执行代码后,脚本输出显示触发器已禁用:

Enabled            : False
EndBoundary        :
ExecutionTimeLimit :
Id                 :
Repetition         : MSFT_TaskRepetitionPattern
StartBoundary      : 2023-09-13T19:00:00
DaysInterval       : 1
RandomDelay        :
PSComputerName     :

但任务计划程序界面中该触发器仍处于“已启用”状态,且到设定时间会正常触发任务。

解决方案

问题核心是修改任务定义后未保存更改,无论使用哪种方式修改触发器,都需要将更新后的任务配置重新注册到任务计划程序中:

方案1:使用PowerShell Cmdlet(推荐)

$taskName = 'TEST'
# 获取目标任务对象
$task = Get-ScheduledTask -TaskName $taskName
# 禁用第一个触发器
$task.Triggers[0].Enabled = $false
# 保存修改到任务计划程序
Set-ScheduledTask -InputObject $task

方案2:使用COM对象

$taskName = 'TEST'
$computerName = "LAPTOP"
$TaskScheduler = New-Object -com("Schedule.Service")
$TaskScheduler.Connect($computerName) 
$TaskFolder = $TaskScheduler.GetFolder("\")

# 获取任务及当前定义
$task = $TaskFolder.GetTask($taskName)
$definition = $task.Definition
# 禁用指定触发器
$definition.Triggers.Item(1).Enabled = $false
# 重新注册任务以保存更改(参数6表示创建或更新任务,其余参数沿用原任务设置)
$TaskFolder.RegisterTaskDefinition($taskName, $definition, 6, $null, $null, $null)

内容的提问来源于stack exchange,提问作者QLN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 02:33:15