Windows任务计划:定时运行脚本

需要按时运行脚本时,Windows任务计划可以代替人工登录后双击程序。本教程先用只向文本文件写入时间的无害脚本验证整个链路,再替换为自己的业务脚本。它不创建远程访问服务,也不要求把所有任务设为SYSTEM或最高权限。

准备一个可验证的脚本

在服务器建立C:\BaoleTasks目录,使用记事本保存heartbeat.cmd,内容如下。确认文件实际扩展名是.cmd而不是.cmd.txt,先不要放入正式业务命令。

@echo off
echo %date% %time%>>"C:\BaoleTasks\heartbeat.log"

手工双击脚本一次,应在同一目录看到heartbeat.log新增一行当前时间。没有生成文件时先检查目录写入权限和文件扩展名,不能跳到计划任务里反复尝试。示例路径无空格;自己的路径含空格时,脚本内与任务参数都要正确加引号。

创建基本任务

中文新建操作窗口中的程序或脚本、添加参数和起始于三个空白字段。
中文“新建操作”窗口字段示例,Windows版本未注明:分别核对“程序或脚本”“添加参数”“起始于”。图中输入为空,按正文填写并验证,不代表任务已保存或运行。
  1. 按Win+R运行taskschd.msc,打开“任务计划程序”,选择“任务计划程序库→创建基本任务”。
  2. 名称使用易识别的业务名,例如Baole-Heartbeat-Demo;描述写明用途、负责人和脚本位置。
  3. 选择“每天”,设置服务器本地时间下的开始日期和时间。确认系统时区正确,避免误认为任务没有触发。
  4. 操作选择“启动程序”。程序填写%SystemRoot%\System32\cmd.exe,参数填/c C:\BaoleTasks\heartbeat.cmd,起始于填C:\BaoleTasks。起始目录不要留给脚本自行猜测。
  5. 完成向导后打开任务属性。在“常规”确认执行账户,初次测试保持仅在该用户登录时运行;在“操作”再次核对程序、参数和起始目录。

手动运行与定时验证

中文任务库中的上次运行时间和上次运行结果列,原图示例0x0保留,创建者标识已遮挡。
中文任务库字段位置示例,Windows版本未注明:核对“上次运行时间”和“上次运行结果”。图中2018年nas任务的0x0是历史示例,不是本文脚本或本轮备份运行结果;仍需检查实际日志新增内容。
  1. 右键任务选择“运行”,等待任务完成后刷新列表,查看“上次运行结果”。0x0表示程序返回成功,但还要检查heartbeat.log确有新增内容。
  2. 检查“下次运行时间”符合预期。需要验证触发器时,可临时设置几分钟后执行一次,记录结果后恢复正式时间,避免长期留下测试任务。
  3. 查看任务“历史记录”;未启用历史时可先启用,再复测。持续运行的任务要检查状态和日志,不能只看“就绪”二字。

需要无人登录也运行时

中文任务属性常规页中的任务名、运行账户、用户登录选项和最高权限复选框,账户标识已遮挡。
中文任务属性“常规”页字段示例:任务名、运行账户、登录方式和权限选项可在同页核对,账户标识已遮挡。原图选中后台运行和最高权限,仅说明选项位置,不是本文默认推荐;底部“配置”是兼容性设置,不代表系统实际版本。

确认脚本是非交互程序,不依赖桌面弹窗、用户映射盘或手工确认。再在任务属性中按需要选择“无论用户是否登录都运行”,由账户本人完成凭据输入,并确认拥有批处理作业登录权限和目录访问权限。密码变更后需同步维护任务凭据。不要把密码写进脚本,也不要为绕过错误直接换成高权限SYSTEM账户。

失败后从哪里查

结果 优先检查
手工能运行,任务里失败 执行账户、起始目录、完整路径、脚本权限和环境变量。
0x0但没有业务结果 脚本是否实际处理目标文件,是否吞掉错误;给脚本增加可追踪日志和正确退出码。
只在保持登录时运行 检查常规运行方式和程序是否依赖交互会话;断开RDP与注销不是同一件事。
任务重叠执行 按业务特性设置重复触发与多实例策略,先验证不会中断未完成操作。

验证完成后,删除或禁用Baole-Heartbeat-Demo测试任务。正式任务应使用独立名称、受控脚本目录和最小必要权限,记录变更前后的触发器及运行结果。