set-scheduledtask可修改触发器、操作和设置,但不能直接改名称、描述或安全上下文;需先get-scheduledtask获取任务,再用new-scheduledtasktrigger等重建组件并传入参数更新。
set-scheduledtask 用于修改 windows 计划任务的**触发器、操作、设置和注册信息**,但不能直接修改任务的名称、描述或安全上下文(如运行用户)——这些需用 register-scheduledtask 重注册。关键在于:先用 get-scheduledtask 获取任务对象,再通过参数传入修改后的组件对象。
修改触发器(如执行时间)
触发器必须重新构造并传入 -Trigger 参数。不能只改原触发器的某个属性(如 $task.Triggers[0].StartBoundary = "2025-04-01T09:00:00"),那样不会生效。
- 获取原任务:
$task = Get-ScheduledTask -TaskName "MyBackup" - 新建触发器(例如改为每天上午 9 点):
$newTrigger = New-ScheduledTaskTrigger -Daily -At "09:00" - 应用修改:
$task | Set-ScheduledTask -Trigger $newTrigger
修改操作(如要运行的程序或参数)
操作也需重建。比如把原命令 cmd.exe /c echo hello 改为 PowerShell.exe -Command "Write-Log":
- 新建操作:
$newAction = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument '-Command "Write-Log"' - 更新任务:
Set-ScheduledTask -TaskName "MyBackup" -Action $newAction - 注意:若原任务有多个操作,
-Action只替换第一个;如需保留全部操作,需手动重建整个操作数组并传入
修改设置(如失败重试、停止条件)
设置(Settings)是可直接修改的对象,但必须整体替换:
- 复制原设置:
$settings = $task.Settings - 修改属性:
$settings.AllowStartIfOnBatteries = $true,$settings.StartWhenAvailable = $true - 提交更新:
Set-ScheduledTask -TaskName "MyBackup" -Settings $settings - 常用可改属性包括:
RestartCount、RestartInterval、StopIfGoingOnBatteries、DisallowStartIfOnBatteries等
注意事项与常见问题
修改任务需要管理员权限;部分字段(如 Principal 中的用户账户、密码、运行级别)无法用 Set-ScheduledTask 更新,必须调用 Register-ScheduledTask -TaskName ... -User ... -Password ... -Force 重注册。
- 修改后建议立即验证:
Get-ScheduledTaskInfo -TaskName "MyBackup"查看下次运行时间 - 如果任务已禁用,修改后仍保持禁用状态;启用需额外执行:
Enable-ScheduledTask -TaskName "MyBackup" - 对远程计算机操作需加
-CimSession参数,并确保 WinRM 已配置











