使用 schtasks.exe 管理任务计划程序

概要

本文介绍如何在 Windows Server 和 Windows 客户端环境中,使用内置命令行工具 schtasks.exe 管理任务计划程序。

所有示例均假定从 PowerShell 执行,并统一使用 反引号(`) 作为换行续行符。


变量记法说明

变量名 示例值 说明
<<SERVER_NAME>> WSRV2025 目标服务器名称
<<ADMIN_USER>> Administrator 任务执行账户
<<TASK_NAME>> DailyTempCleanup 任务名称
<<SCRIPT_PATH>> C:\Maintenance\cleanup_temp.ps1 要执行的脚本路径
<<LOG_PATH>> C:\Maintenance\Logs 日志文件夹
<<BACKUP_PATH>> C:\Maintenance\Backups 事件日志备份路径

关于 PowerShell 与 CMD 的续行符

本文所有命令均以 PowerShell 执行为前提。

  • PowerShell:反引号(`)
  • CMD:插入号(^)

示例(PowerShell):

schtasks.exe /Create `
  /TN "Example" `
  /SC DAILY `
  /ST 02:00 `
  /TR "powershell.exe -File example.ps1"

Step 1: schtasks.exe 子命令概览

子命令 用途
/Create 创建新任务
/Delete 删除任务
/Query 列出任务、查看详细信息、导出 XML
/Change 修改任务配置
/Run 立即执行任务
/End 停止正在执行的任务
/ShowSid 查看任务执行账户对应的 SID

Step 2: /Create 的基本语法与主要选项

Step 2.1 整体语法

schtasks.exe /Create `
  /TN "<<TASK_NAME>>" `
  /TR "<<执行命令>>" `
  /SC 调度类型 `
  [其他选项...]

Step 2.2 常用选项一览

选项 内容
/SC 调度类型(DAILY / WEEKLY / MONTHLY / ONLOGON / ONEVENT 等)
/MO 修饰符
/ST HH:mm 开始时间
/D 执行日期(1~31 或 MON/TUE…)
/RU 执行任务的账户
/RP 密码(* 表示交互输入)
/RL HIGHEST 以最高权限运行
/F 强制覆盖已存在任务

关于 /MO(修饰符)
用于精细指定周期或位置的参数,用来控制执行频率或第几周/第几次。

示例:

  • “每 3 小时一次” → /SC HOURLY /MO 3
  • “每 2 周执行一次” → /SC WEEKLY /MO 2
  • “每月第 2 个星期三” → /SC MONTHLY /MO SECOND /D WED
  • “基于事件触发” → /SC ONEVENT /MO [XPath]

Step 2.3 /SC 调度类型列表

/SC 说明
DAILY 每日
WEEKLY 每周
MONTHLY 每月
ONCE 一次性
ONSTART 系统启动时
ONLOGON 用户登录时
ONIDLE 系统空闲时
ONEVENT 事件日志触发

Step 2.4 每日任务示例

schtasks.exe /Create `
  /TN "DailyTempCleanup" `
  /TR "powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\Maintenance\cleanup_temp.ps1 -DaysToKeep 7 -LogPath <<LOG_PATH>>" `
  /SC DAILY `
  /ST 02:00 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.5 登录时执行(ONLOGON)

schtasks.exe /Create `
  /TN "OnLogonAudit" `
  /SC ONLOGON `
  /TR "powershell.exe -File C:\Scripts\logon_audit.ps1" `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.6 启动时执行(ONSTART)

schtasks.exe /Create `
  /TN "OnStartInit" `
  /SC ONSTART `
  /TR "powershell.exe -File C:\Scripts\startup_init.ps1" `
  /RU "SYSTEM" `
  /RL HIGHEST `
  /F

Step 2.7 基于事件日志的触发(ONEVENT)

schtasks.exe /Create `
  /TN "Event101Handler" `
  /SC ONEVENT `
  /EC System `
  /MO "*[System/EventID=101]" `
  /TR "powershell.exe -File C:\Scripts\event_handler.ps1" `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.8 每 3 小时执行一次

schtasks.exe /Create `
  /TN "Every3Hours" `
  /TR "powershell.exe -File script.ps1" `
  /SC HOURLY `
  /MO 3 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.9 每月“第 2 个星期三”执行

schtasks.exe /Create `
  /TN "SecondWednesdayTask" `
  /TR "powershell.exe -File task.ps1" `
  /SC MONTHLY `
  /MO SECOND `
  /D WED `
  /ST 03:00 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.10 每月“最后一天(LASTDAY)”执行

schtasks.exe /Create `
  /TN "LastDayMonthly" `
  /TR "powershell.exe -File script.ps1" `
  /SC MONTHLY `
  /MO LASTDAY `
  /M * `
  /ST 01:00 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.11 “每 2 周一次”执行

schtasks.exe /Create `
  /TN "Every2Weeks" `
  /TR "powershell.exe -File script.ps1" `
  /SC WEEKLY `
  /MO 2 `
  /D MON `
  /ST 05:00 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 3: /Query(列表与详细信息)

选项 说明
/FO TABLE 以表格形式输出
/FO LIST 以键值列表形式输出
/V 输出详细信息(触发器、操作等)
/TN "<<TASK_NAME>>" 仅显示指定任务
schtasks.exe /Query /FO TABLE
schtasks.exe /Query /FO LIST /V
schtasks.exe /Query /TN "<<TASK_NAME>>" /FO LIST /V

Step 4: /Change(修改任务)

选项 说明
/TN 目标任务名称
/RU 修改执行账户
/RP * 交互式输入新密码
/TR 替换执行命令
/ENABLE /DISABLE 启用 / 禁用任务

注意:/Change 无法修改 触发器相关定义(如 /SC, /MO, /D, /M)。
如需调整调度策略,更安全的做法是先使用 /Delete 删除,再用 /Create 重新创建任务。

修改执行账户

schtasks.exe /Change `
  /TN "<<TASK_NAME>>" `
  /RU "<<ADMIN_USER>>" `
  /RP *

修改执行命令

schtasks.exe /Change `
  /TN "<<TASK_NAME>>" `
  /TR "powershell.exe -File <<SCRIPT_PATH>> -LogPath <<LOG_PATH>>"

启用 / 禁用任务

schtasks.exe /Change /TN "<<TASK_NAME>>" /ENABLE
schtasks.exe /Change /TN "<<TASK_NAME>>" /DISABLE

Step 5: /Run(立即执行)与 /End(停止执行)

选项 说明
/Run 立即执行任务
/I 忽略调度约束(开始/结束日期等)强制执行
/End 停止正在运行的任务
/TN 目标任务名称
schtasks.exe /Run /TN "<<TASK_NAME>>"
schtasks.exe /Run /TN "<<TASK_NAME>>" /I

schtasks.exe /End /TN "<<TASK_NAME>>"

Step 6: 从 XML 导入任务

XML 导入

选项 说明
/XML 文件 基于 XML 定义创建任务
/RU 覆盖 XML 中的执行账户
/RP * 交互式输入密码
schtasks.exe /Create `
  /TN "<<TASK_NAME>>" `
  /XML "C:\TaskTemplates\<<TASK_NAME>>.xml" `
  /RU "<<ADMIN_USER>>" `
  /RP *

通过 Query 导出 XML

选项 说明
/XML ONE 将任务定义以单个 XML 输出
> 文件名 使用重定向保存为文件
schtasks.exe /Query `
  /TN "<<TASK_NAME>>" `
  /XML ONE `
  > C:\TaskTemplates\<<TASK_NAME>>.xml

Step 8: /Delete(删除任务)

选项 说明
/Delete 删除模式
/TN 目标任务名称
/F 不提示确认,强制删除
schtasks.exe /Delete /TN "<<TASK_NAME>>" /F

Step 9: /ShowSid(查看执行账户 SID)

选项 说明
/ShowSid 显示与任务执行账户绑定的 SID
/TN 目标任务名称
schtasks.exe /ShowSid /TN "<<TASK_NAME>>"

Step 10: 管理远程服务器上的任务

选项 说明
/S "<<SERVER_NAME>>" 目标远程服务器
/U 远程连接使用的账户
/P * 远程账户密码(* 表示交互输入)
其他 与本地任务定义相同的参数
schtasks.exe /Create `
  /S "<<SERVER_NAME>>" `
  /U "<<ADMIN_USER>>" `
  /P * `
  /TN "<<TASK_NAME>>" `
  /TR "powershell.exe -File <<SCRIPT_PATH>>" `
  /SC DAILY `
  /ST 02:00 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

结论

通过 schtasks.exe,可以方便地将任务计划程序集成到服务器构建与日常运维自动化场景中。

  • 利用 /SC/MO 的组合,可以灵活定义每日、每周、每月、第 n 个星期几、月末等多种调度方式。
  • 借助 ONLOGON / ONSTART / ONEVENT,可以实现基于登录、启动以及事件日志的触发式自动化。
  • 使用 /Query /XML/Create /XML,可以导出/导入任务定义,统一为 XML 模板进行复用。
  • 通过 /Change/Run/End/Delete/ShowSid 可以覆盖任务运维阶段的大部分管理需求。
  • 借助 /S /U /P,同一套任务定义可以快速同步到多台远程服务器上,实现批量自动化管理。