概要
本文介绍如何在 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,同一套任务定义可以快速同步到多台远程服务器上,实现批量自动化管理。