PowerShell通过schtasks命令或XML配置实现计划任务失败重试,/ri和/rc参数设置重试间隔与次数,或修改XML中RestartOnFailure、RestartInterval、RestartCount节点;重试仅响应执行失败,脚本内重试更精准。
powershell 本身不直接“配置计划任务的失败重试”,而是通过调用 windows 任务计划程序的底层接口(如 schtasks 命令或 com/wmi 对象)来设置。真正的重试逻辑由任务计划程序服务(task scheduler service)执行,powershell 负责写入对应参数。
使用 schtasks 命令行配置重试
这是最常用、兼容性最好的方式,适用于 Windows 7 至 Win11 所有版本:
- 在创建新任务时,用
/RI(Retry Interval)和/RC(Retry Count)参数指定重试行为 - 例如:每 5 分钟重试一次,最多重试 3 次
说明:
- /ri 5 表示失败后等待 5 分钟再重试
- /rc 3 表示最多重试 3 次(含首次执行共尝试 4 次)
- 若任务成功,重试计数自动清零
用 PowerShell 修改已有任务的重试设置
如果任务已存在,不能直接用 Set-ScheduledTask 修改重试参数,需导出 → 编辑 XML → 重新注册:
通过 SSH 隧道从 Android 设备在互联网上对 Windows PC 实现完整远程控制的设置与使用指南,适用于远程桌面访问、安全 RDP 等。
- 先导出当前任务为 XML:
schtasks /query /tn "CheckWinRM" /xml > C:\Temp\CheckWinRM.xml - 用 PowerShell 打开该 XML,找到
<Principals>后的<Settings>区域,添加或修改以下节点:
<AllowStartIfOnBatteries>true</AllowStartIfOnBatteries>
<RestartOnFailure>true</RestartOnFailure>
<RestartInterval>PT5M</RestartInterval>
<RestartCount>3</RestartCount>
</Settings>
- 保存后重新注册:
schtasks /create /tn "CheckWinRM" /xml "C:\Temp\CheckWinRM.xml"
验证与排查关键点
重试是否生效,不能只看任务“最后运行时间”,要查两项:
-
上次运行结果:在任务属性 → “常规”选项卡底部查看十六进制状态码(如
0x0成功,0x1拒绝访问,0x80070005权限错误) - 历史记录:右键任务 → “启用历史记录”,然后在“历史记录”选项卡中筛选“操作”为“任务已启动”“任务已完成”“任务已失败”,可清晰看到每次重试的时间与结果
- 注意:重试仅对“执行失败”触发(如脚本崩溃、权限不足、路径不存在),不针对脚本内部业务失败(如服务启动失败但 PowerShell 进程退出码为 0)
更可靠的替代思路:在脚本内实现重试
当外部重试粒度太粗(比如等 5 分钟才试第二次),建议把重试逻辑下沉到 PowerShell 脚本中:
- 用
Start-Service+try/catch+ 循环 +Start-Sleep控制间隔 - 配合日志记录(如写入
$env:TEMP\ServiceRepairLog.txt),便于区分是系统级失败还是服务自身异常 - 这样既能快速响应,又能避免因网络抖动、资源争用导致的假失败

















