如何使用PowerShell为计划任务设置到期自动失效日期
解决方案
计划任务的到期失效规则属于触发器的EndBoundary属性,不属于任务全局设置范畴,因此无法通过New-ScheduledTaskSettingsSet配置,这是你之前找不到对应参数的原因。
你要的30天内每天9点起每15分钟运行一次、到期自动失效的效果可以通过以下两种方式实现:
方案1:创建触发器时直接完成所有配置(更推荐)
提前配置好触发器的重复规则、到期时间,注册任务时直接传入即可,无需二次修改:
# 自定义变量请根据实际情况修改 $user = "指定服务账号" $action = New-ScheduledTaskAction -Execute "待执行程序路径" -Argument "运行参数" $password = "服务账号密码" # 定义任务生效起始时间、30天后的到期时间 $startTime = Get-Date "09:00:00" $expireTime = $startTime.AddDays(30) # 创建每日触发器并配置所有规则 $trigger = New-ScheduledTaskTrigger -Daily -At $startTime # 配置重复规则:间隔15分钟,每次触发周期持续1整天 $trigger.Repetition.Interval = "PT15M" $trigger.Repetition.Duration = "P1D" # 配置触发器到期时间,格式需符合ISO 8601规范 $trigger.EndBoundary = $expireTime.ToString("yyyy-MM-ddTHH:mm:ss") # 注册计划任务 $principal = New-ScheduledTaskPrincipal -UserId $user -RunLevel Highest -LogonType ServiceAccount Register-ScheduledTask -TaskName 'KView' -Description 'Kview setup for monitoring' -Action $action -Trigger $trigger -Principal $principal -Password $password
方案2:沿用现有先注册后修改的写法
之前注释的两行代码错误原因是$task.Triggers是触发器集合,需要指定索引访问第一个触发器才能修改属性,修正如下:
$trigger = New-ScheduledTaskTrigger -Daily -At 9am $principal = New-ScheduledTaskPrincipal -UserId $user -RunLevel Highest -LogonType ServiceAccount $task = Register-ScheduledTask -TaskName 'KView' -Description 'Kview setup for monitoring' -Action $action -Trigger $trigger -Principal $principal # 修正后的边界配置代码 $date = Get-Date "9:00" $task.Triggers[0].StartBoundary = $date.ToString("yyyy-MM-ddTHH:mm:ss") $task.Triggers[0].EndBoundary = $date.AddDays(30).ToString("yyyy-MM-ddTHH:mm:ss") $task.Triggers[0].Repetition.Duration = 'P1D' $task.Triggers[0].Repetition.Interval = 'PT15M' $task | Set-ScheduledTask -User $user -Password $password
注意事项
- 时间边界属性
StartBoundary、EndBoundary必须传入yyyy-MM-ddTHH:mm:ss格式的字符串,否则计划任务组件无法正常识别 - 任务到期后仅触发器失效,任务本身不会自动删除,如需同时删除到期任务可以额外增加到期清理逻辑
内容的提问来源于stack exchange,提问作者Karan Sharma
相关产品推荐
相关产品推荐

