修改计划任务需用set-scheduledtask更新定义,先用get-scheduledtask确认任务存在及详情,再通过new-scheduledtaskaction等构造新对象并一次性更新动作、触发器、主体和设置,注意凭据与登录类型匹配权限要求。
修改现有计划任务的执行参数,核心是用 set-scheduledtask 更新任务定义,而不是删除重建。关键在于准确获取原任务、构造新动作/触发器/主体等对象,并确保权限和上下文一致。
确认并获取当前任务信息
先查清任务是否存在、路径是否正确,避免操作错误任务:
- 列出所有任务(按路径筛选更准):
Get-ScheduledTask -TaskPath '\Microsoft\Operations Management Suite\' - 查看具体任务详情(含动作、触发器、安全设置):
Get-ScheduledTask -TaskName "ADSecurityAssessment" | Select-Object -ExpandProperty Actions
Get-ScheduledTask -TaskName "ADSecurityAssessment" | Select-Object -ExpandProperty Triggers
更新执行程序或参数(最常见需求)
如果只是改运行的脚本路径、命令行参数或工作目录,只需新建 New-ScheduledTaskAction 并替换:
在 Windows 11 上"直接发声"的 TTS(从 WSL2/TUI 调用 powershell.exe + System.Speech)。适用于用户说"说出来/读出来/语音播报/用TTS",或反馈"没声音/tts 生成的 mp3 是空的/播不出来",以及需要中文语音但 OpenClaw 内置 tts 不可用时。
- 例如:把原来运行
run.cmd改为运行PowerShell.exe并传参:
$newAction = New-ScheduledTaskAction -Execute 'PowerShell.exe' -Argument '-ExecutionPolicy Bypass -File "C:\Scripts\new-assess.ps1"' - 再执行更新:
Set-ScheduledTask -TaskName "ADSecurityAssessment" -Action $newAction
同步更新触发器、运行身份或高级设置
多个参数需一并更新时,建议一次性构造完整对象:
- 新建触发器(如改为每周六凌晨5点):
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Saturday -At '05:00' - 新建主体(如改用 gMSA 账户):
$principal = New-ScheduledTaskPrincipal -UserId 'ad\adsecgmsa$' -LogonType Password -RunLevel Highest - 新建设置(如允许电池供电时运行):
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopOnIdleEnd - 全部更新:
Set-ScheduledTask -TaskName "ADSecurityAssessment" -Trigger $trigger -Principal $principal -Settings $settings
注意权限与凭据一致性
若原任务配置了“不管用户是否登录都要运行”,必须提供密码或使用 gMSA;否则会报错“拒绝访问”:
- 交互式任务(仅用户登录时运行)可用当前用户 ID,无需密码:
-UserId "$env:USERDOMAIN\$env:USERNAME" - 系统级任务需显式指定凭据或改用
-LogonType ServiceAccount配合 gMSA - 修改后建议手动测试:
Start-ScheduledTask -TaskName "ADSecurityAssessment"










