命令是干什么的
计划任务“没跑”通常不是任务不存在,而是没触发或执行失败。Windows 用 Get-ScheduledTask 看状态与配置、Get-ScheduledTaskInfo 看上次运行时间与返回码,再配合 Microsoft-Windows-TaskScheduler 日志确认真实的启动与结束事件;受限或被剪裁的系统可用 schtasks /query /v 拿到同样信息。
排查顺序
沿“是否触发→是否执行→结果是否正确”三层推进:先看 NextRunTime 与触发器(时间、空闲条件、电源条件、错过后的补跑设置),再看 LastRunTime 与 LastTaskResult,最后才翻脚本自身日志与事件日志。跳过前两层直接改脚本,是最常见的无效动作。
基本信息
| 适用平台 | Windows 10/11、Server 2016 及以后;ScheduledTasks 模块随系统自带 |
|---|---|
| 权限要求 | 查看本机任务普通用户即可,修改或查看他人任务需管理员 |
| 语法 | Get-ScheduledTask -TaskName 名称;Get-ScheduledTaskInfo -TaskName 名称 |
| 结果码 | LastTaskResult:0 成功、0x41301 正在运行、0x41303 从未运行 |
典型使用场景
- 定时备份或巡检脚本“没出结果”:先核对上次运行时间与返回码,区分未触发与执行失败
- 任务一直停在 Running:检查是否有上次运行的残留子进程未退出
- 批量清点全机任务,筛出被禁用或长期未成功执行的对象
- 上线或迁移前核对运行账户(SYSTEM 或服务账号)与触发器条件是否匹配
- 任务历史被关闭时,改从事件日志取证启动与结束记录
常用示例
常用示例
Get-ScheduledTask -TaskName 'NightBackup' | Select-Object TaskName, State
Get-ScheduledTaskInfo -TaskName 'NightBackup' | Select-Object LastRunTime, LastTaskResult, NextRunTime
Get-ScheduledTask | Where-Object State -eq 'Disabled' # 找出被禁用的任务
schtasks /query /tn "NightBackup" /v /fo LIST # 无 PS 模块时的等价查询
# 任务历史默认可能关闭:事件日志 Microsoft-Windows-TaskScheduler/Operational关键字段读法
| 字段 | 含义 | 判读 |
|---|---|---|
| TaskName | 任务名 | 与 schtasks /tn 使用同一名称 |
| State | 任务状态 | Ready/Disabled/Running/Queued |
| LastRunTime | 上次运行时刻 | 长期不更新说明触发器未命中或任务被禁用 |
| LastTaskResult | 上次返回码 | 0 成功;非 0 按错误码定位 |
| NextRunTime | 下次运行时刻 | 与触发器设置比对是否合理 |
0x41303 表示任务从未运行,多因触发器条件未满足(未空闲、未接电源、错过时间后不补跑);先看触发器约束,再怀疑脚本。
返回码 0x1 一般来自脚本内部错误,0x2 找不到文件多为路径或“起始于”工作目录写错,后者是最常被漏配的一项。