SCHTASKS(Task Scheduler Configuration Tool)命令参数 :允许管理员在本地或远程系统上创建、删除、查询、更改、运行和结束定时任务核心用途:创建 / 删除 / 查询 / 运行定时脚本、程序、批处理任务,支持本地与远程服务器调度管理。
schtasks 完整英文全称与官方释义
一、缩写拆解
schtasks = Scheduled Tasks- sch = Scheduled(计划的、定时调度的)
- tasks = Tasks(任务)
完整官方工具名称:Scheduled Tasks Utility可执行文件名:
schtasks.exe
二、Microsoft Learn 官方标准全称
官方原文定义
三、单词分段详解
- Scheduled:定时调度、按计划安排
- Tasks:系统任务、后台定时作业
四、补充背景
- 该命令替代老旧
at.exe定时工具,是 Windows 全平台标准任务计划命令行工具; - 对应图形界面:任务计划程序(Task Scheduler);
- 核心用途:创建 / 删除 / 查询 / 运行定时脚本、程序、批处理任务,支持本地与远程服务器调度管理。
schtasks.exe 完整解构
schtasks.exe:Windows 任务计划 V2 版本命令行客户端;本身不做调度逻辑,只是 CLI 外壳,全部逻辑交给
Schedule(Task Scheduler)服务博客园。 服务名:Schedule;内部引擎:schedsvc.dll;COM 客户端库:taskschd.dll;协议:MS‑TSCH。
一、底层原理总览
schtasks.exe解析命令行参数(/create/query /delete/run /end/change /export/import)- 加载
taskschd.dllCOM 组件,实例化Schedule.ServiceCOM 对象(CLSID0F87369F‑A4E5‑4CFC‑BD3E‑73E6154572DD)。 - COM 接口封装 MS‑TSCH RPC 协议:
- 本地:
ncalrpcALPC 本地 RPC; - 远程 (
/S 主机):ncacn_ip_tcp,RPC 端口 135 + 动态端口。
- 本地:
- RPC 请求送达
svchost.exe -k netsvcs -p -s Schedule,加载schedsvc.dll执行真正业务逻辑。 - Schedule 服务完成权限校验、任务注册、触发器管理、持久化写入;返回结果通过 RPC 回传给 schtasks.exe,格式化输出文本。
关键点:schtasks.exe 不读写 XML、不读写注册表;全部持久化操作由 Schedule 服务完成。直接修改 XML / 注册表不会实时生效,服务内存缓存优先。
二、依赖文件清单
客户端(schtasks.exe 进程内加载)
表格
| 文件 | 路径 | 作用 |
|---|---|---|
schtasks.exe |
C:\Windows\System32\schtasks.exe |
命令行入口,参数解析、输出格式化 |
taskschd.dll |
C:\Windows\System32\taskschd.dll |
V2 任务计划 COM 客户端库,提供ITaskService、ITaskFolder、IRegisteredTask全套接口,封装 MS‑TSCH RPC 调用 |
rpcrt4.dll |
系统 32 | RPC 运行时,序列化、ALPC/TCP 传输 |
advapi32.dll |
系统 32 | SID、安全描述符、令牌模拟、权限检查 |
kernel32.dll / ntdll.dll |
系统 32 | 基础进程、IPC 系统调用 |
服务端(Schedule 服务,svchost 进程)
表格
| 文件 | 路径 | 作用 |
|---|---|---|
svchost.exe |
System32 | 服务宿主进程 |
schedsvc.dll |
System32 | 任务调度引擎核心:触发器计时器、条件判断、任务实例启动、状态跟踪、读写 TaskCache、XML 持久化 |
taskhostw.exe |
System32 | 任务执行宿主,运行任务动作(exe、COM 处理程序);旧版为 taskeng.exe |
wevtapi.dll |
System32 | 写入Microsoft‑Windows‑TaskScheduler/Operational事件日志 |
powrprof.dll |
System32 | 读取电源状态(唤醒条件、闲置条件) |
废弃 V1 组件(仅给 at.exe 兼容)
mstask.dll:旧版 V1 任务计划库,.job文件,WinVista 之后不再用于 schtasks.exe。
三、持久化存储(双重存储模型,服务维护双向同步)
1)XML 任务定义文件
C:\Windows\System32\Tasks\
树形目录存放每个任务 XML;存储完整任务配置:触发器、Actions、Principals、Settings、Conditions;不要手动编辑 XML,会破坏和 TaskCache 索引一致性。
2)注册表 TaskCache(运行时索引、元数据缓存)
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache
Tree:维护任务目录树,任务路径映射 GUID,存储安全描述符 SD;Tasks\{GUID}:二进制 Blob 缓存:触发器、动作、DynamicInfo(上次运行时间、退出码);Boot / Logon / Plain:按触发器类型分组的 GUID 索引表。
⚠️直接改注册表 / XML,Schedule 服务内存不会刷新;需要重启 Schedule 服务才会重新加载。
四、完整逻辑调用链路示例:schtasks /create
schtasks.exe /create /TN "\test\task1" /TR notepad.exe /SC ONCE
↓解析命令行参数
taskschd.dll!CoCreateInstance 创建 Schedule.Service COM对象
ITaskService::NewTask() 生成ITaskDefinition对象,填充触发器、动作、账户参数
IRegisteredTaskCollection::RegisterTaskDefinition()
↓rpcrt4.dll 封装MS‑TSCH RPC SchRpcRegisterTask
↓ncalrpc ALPC本地RPC → 发送到Schedule服务svchost
svchost+schedsvc.dll:
1. 安全校验(调用者权限、SD访问控制)
2. 生成任务GUID
3. 写入 C:\Windows\System32\Tasks\xxx.xml
4. 更新注册表 TaskCache Tree / Tasks\{GUID}
5. 加载触发器,加入调度计时器队列
↑RPC返回注册成功/失败
schtasks.exe接收返回,打印“成功:已创建任务”
任务触发执行链路(schtasks 不参与)
- schedsvc.dll 内部计时器 / 事件监听,触发器条件满足
- 根据任务 Principal 身份,建立安全令牌
- 启动 taskhostw.exe,执行任务 Action(exe、脚本、COM 处理程序)
- 记录运行结果、退出码,写回 TaskCache DynamicInfo;写入事件日志。
五、配套依赖服务(Schedule 服务启动先决条件)
- RPCSS(Remote Procedure Call):RPC 端点映射;没有 RPCSS Schedule 服务无法启动;
- EventLog:任务运行事件日志;
- Power:电源状态检测,任务电源条件依赖;
- Winlogon:登录触发器、会话检测;
远程场景:目标主机需要 RPCSS、防火墙开放 RPC (135 + 动态端口);可选 RemoteRegistry。
六、上层等价工具(全部复用 taskschd.dll + MS‑TSCH)
taskschd.mscMMC 图形界面:mmc.exe + taskschd.dll 管理单元;- PowerShell
ScheduledTasks模块:New‑ScheduledTask、Get‑ScheduledTask;底层同样调用 taskschd.dll COM 接口; - VBScript/JScript
CreateObject("Schedule.Service")脚本; - WMI
Win32_ScheduledJob:仅 V1 旧版 at 任务,不推荐。
七、典型故障与坑点
- Schedule 服务未运行:所有 schtasks 命令直接报错;
- 手动修改 XML 或注册表:内存缓存与磁盘存储不一致,任务不触发、查询异常;必须通过 schtasks/PowerShell/COM 接口操作;
- 远程
schtasks /S host失败:防火墙拦截 RPC 端口 135、目标主机 RPCSS 未启动; - TaskCache SD 安全描述符损坏:任务在 MMC 看不见,但服务仍然可以运行;
- 权限:创建修改任务需要管理员权限;任务运行账户密码过期会导致任务失败。
八、演进简要
- V1(XP 及更早):
mstask.dll,.job二进制文件;工具at.exe;触发器能力弱; - V2(Vista/Win7~Win11):
taskschd.dll+schedsvc.dll,XML+TaskCache 双存储;支持事件触发器、登录触发器、会话条件、电源条件;schtasks.exe为 V2 标准 CLI;at.exe只是兼容层。
taskschd.dll 完整解构
文件路径:
C:\Windows\System32\taskschd.dll定位:任务计划 V2 客户端 COM 代理库,客户端侧,不包含调度引擎逻辑;只做面向对象封装,真正调度引擎运行在服务端schedsvc.dll(Schedule 服务)。 CLSID:{0F87369F‑A4E5‑4CFC‑BD3E‑73E6154572DD};ProgID:Schedule.Service;支持 IDispatch,VBS/PowerShell 脚本可直接调用。 协议底层:封装微软公开协议 MS‑TSCH(Task Scheduler Remoting Protocol)Microsoft ...。
一、底层原理
- taskschd.dll 是客户端 COM 包装层,不读写 XML、不读写注册表、没有定时器逻辑。
- 对外暴露 40 + 套 COM 对象模型(
ITaskService、ITaskFolder、ITaskDefinition、ITriggerCollection、IActionCollection、IRegisteredTask),把面向对象调用翻译成 MS‑TSCH RPC 调用(SchRpcRegisterTask、SchRpcEnumTasks、SchRpcRun等 RPC 原语)。 - 本地通信:
ncalrpcALPC 本地 RPC;远程通信:ncacn_ip_tcp,RPC 135 + 动态端口。 - RPC 请求发送给
svchost.exe -k netsvcs -s Schedule,由服务端schedsvc.dll完成权限校验、持久化、触发器调度;结果沿 RPC 原路返回给 taskschd.dll,再向上返回给调用者(schtasks.exe/taskschd.msc/ PowerShell)。
关键区分
- taskschd.dll:客户端代理(用户进程加载)
- schedsvc.dll:服务端调度引擎(svchost 进程加载)
二、依赖文件清单
客户端进程内依赖(调用方进程加载 taskschd.dll 时一并加载)
表格
| 文件 | 路径 | 作用 |
|---|---|---|
taskschd.dll |
System32 | COM 对象实现,MS‑TSCH RPC 封装,IDispatch 脚本支持 |
rpcrt4.dll |
System32 | RPC 运行库,NDR 序列化、ALPC/TCP 传输、绑定句柄管理 |
ole32.dll |
System32 | COM 组件激活、CoCreateInstance、COM 安全配置 |
oleaut32.dll |
System32 | IDispatch 自动化,VBScript/JScript/PowerShell 脚本互操作 |
advapi32.dll |
System32 | SID 转换、安全描述符 SD、令牌模拟 |
kernel32.dll / ntdll.dll |
System32 | 基础进程内存、ALPC 系统调用 |
服务端配套组件(不在调用方进程,RPC 远端)
表格
| 文件 | 载体 | 定位 |
|---|---|---|
svchost.exe |
System32 | Schedule 服务宿主进程 |
schedsvc.dll |
System32 | 调度引擎核心:触发器、计时器、XML 读写、TaskCache 注册表维护、任务实例启动逻辑 |
taskhostw.exe |
System32 | 任务动作宿主,执行 COMHandler 类型任务 |
rpcss.exe |
System32 | RPC 端点映射器,MS‑TSCH 服务注册端点 |
废弃组件(V1 任务计划,不被 taskschd.dll 使用)
mstask.dll:XP 时代 V1 任务库,.job二进制格式;仅用于at.exe兼容,和 taskschd.dll 完全隔离。
三、核心 COM 对象层级(taskschd.dll 对外暴露)
ITaskService (根对象,CoCreateInstance("Schedule.Service"))
├─ GetFolder() → ITaskFolder 任务文件夹对象
│ ├─ RegisterTaskDefinition() 创建/更新任务(映射 RPC SchRpcRegisterTask)
│ ├─ GetTasks() 枚举任务(映射 SchRpcEnumTasks)
│ └─ DeleteTask() 删除任务(映射 SchRpcDelete)
├─ NewTask() → ITaskDefinition 空白任务定义对象
│ ├─ Triggers → ITriggerCollection 触发器集合
│ ├─ Actions → IActionCollection 动作集合(Exec、COMHandler、Email等)
│ ├─ RegistrationInfo 账户、描述
│ └─ Settings 条件、空闲、电源、超时设置
└─ IRegisteredTask 已注册任务实例
├─ Run() 立即运行任务(SchRpcRun)
├─ Stop() 停止任务(SchRpcStop)
└─ get_LastRunTime / get_LastTaskResult 查询运行状态
taskschd.dll 负责把对象属性序列化为 MS‑TSCH 内部 XML 报文,交给 RPC 发送给 Schedule 服务;返回时把 XML 反序列化为 COM 对象属性。
四、完整逻辑调用链路示例:COM 创建任务
调用方(schtasks.exe / PowerShell / taskschd.msc)
↓ole32!CoCreateInstance(CLSID_ScheduleService)
taskschd.dll内部实例化ITaskService对象
taskschd.dll建立RPC绑定句柄:
本地:ncalrpc:[TaskScheduler]
远程:ncacn_ip_tcp:target‑host
↓ITaskService::NewTask() 返回ITaskDefinition
填充Triggers/Actions/Principal属性(全部保存在taskschd.dll本地内存,**尚未写入系统**)
↓ITaskFolder::RegisterTaskDefinition()
taskschd.dll把任务对象序列化为任务XML字符串
调用rpcrt4.dll,发起MS‑TSCH RPC SchRpcRegisterTask
↓ALPC/TCP RPC传输 → svchost+ schedsvc.dll(Schedule服务)
1. 安全校验SD、调用者权限
2. XML校验
3. 写入C:\Windows\System32\Tasks\xxx.xml
4. 更新注册表 TaskCache
5. 加载触发器到调度队列
↑RPC返回HRESULT、IRegisteredTask代理对象
向上返回给上层调用程序
⚠️重点:NewTask 之后只是内存对象,RegisterTaskDefinition RPC 调用到达服务端,任务才真正落地持久化。taskschd.dll 进程崩溃,内存中未提交的任务直接丢失,不会留下任何磁盘痕迹。
五、配套链(注册表、存储、依赖服务)
- COM 注册信息
HKLM\SOFTWARE\Classes\CLSID\{0F87369F‑A4E5‑4CFC‑BD3E‑73E6154572DD}
HKLM\SOFTWARE\Classes\Schedule.Service
注册 ProgID、InprocServer32 指向taskschd.dll,用于脚本CreateObject("Schedule.Service")创建对象。
- 持久化存储不由 taskschd.dll 操作
- XML:
C:\Windows\System32\Tasks\* - 注册表索引:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache
全部由schedsvc.dll(服务端)读写;taskschd.dll 只传递 XML 字符串,本身不访问文件 / 注册表。
- 底层依赖服务(必须运行,否则 taskschd.dll 调用全部失败)
RpcSs(Remote Procedure Call)RPC 运行基础RpcEptMapperRPC 端点映射Schedule(Task Scheduler)真正业务服务;服务停止,taskschd.dll 所有 COM 调用返回 RPC 服务器不可用。
六、上层调用方(全部复用 taskschd.dll)
schtasks.exe:命令行,解析参数,调用 taskschd.dll COM 接口taskschd.mscMMC 管理单元:mmc.exe 加载 taskschd.dll 管理单元- PowerShell
ScheduledTasks模块:Get‑ScheduledTask、New‑ScheduledTask,内部调用 taskschd.dll COM - VBS/JScript:
CreateObject("Schedule.Service")脚本直接调用 - 第三方 C/C++ 程序:引用
taskschd.h,链接taskschd.lib
七、典型故障与坑点
- Schedule 服务未运行:taskschd.dll CoCreateInstance 可以成功,但后续所有方法调用抛出
RPC服务器不可用;COM 对象可以创建,但 RPC 通道不通。 - taskschd.dll 损坏:schtasks.exe、taskschd.msc 全部无法工作;可通过
sfc /scannow修复。 - 远程调用失败:目标主机防火墙拦截 RPC 135 端口;RpcSs 未启动;远程计算机 Schedule 服务异常。
- 误区:直接修改 XML / 注册表不会生效;taskschd.dll 根本不读磁盘 XML;磁盘 XML 是服务端
schedsvc.dll维护。 - 权限:COM 对象本身无提权能力;实际权限校验发生在服务端 schedsvc.dll,不是 taskschd.dll 客户端。
八、演进说明
- Vista 及以后引入 V2 架构,
taskschd.dll正式登场; - XP 只有 V1 架构,只有
mstask.dll,没有 taskschd.dll; - Win10/Win11 持续扩展 COM 接口,增加后台任务、条件、电源触发器,但整体 COM 模型与 MS‑TSCH 协议保持向下兼容。
schedsvc.dll 完整解构
文件路径:
C:\Windows\System32\schedsvc.dll服务:Schedule(Task Scheduler);宿主进程:svchost.exe -k netsvcs -p -s Schedule;SYSTEM 权限,PLP 受保护轻量进程,防止被调试、注入篡改。 定位:V2 任务计划真正服务端调度引擎;实现 MS‑TSCH 协议服务端 RPC 接口ITaskSchedulerService;客户端taskschd.dll只做 COM 代理,全部业务逻辑、持久化、触发器调度、任务启动均由schedsvc.dll完成。
关键区分
taskschd.dll:客户端 COM 代理(运行在 schtasks.exe/mmc.exe/powershell.exe)schedsvc.dll:服务端调度内核(运行在 svchost.exe (Schedule 服务))
一、底层原理与内部四大核心模块
模块 1:存储加载管理器(服务启动初始化第一阶段)
- Schedule 服务启动,
schedsvc.dll入口执行初始化 - 读取注册表索引库
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache - 根据 Tree 目录映射、GUID 索引,加载磁盘
C:\Windows\System32\Tasks\*.xml,解析 XML Schema - 在服务内存中实例化完整任务对象:Triggers、Actions、Principal、Settings、Conditions;构建内存任务库;注册全部触发器到调度池。
⚠️调度运行完全依赖内存对象;直接修改 XML / 注册表不会生效,必须走 MS‑TSCH RPC 接口;只有重启 Schedule 服务才会重新加载磁盘与注册表。
模块 2:MS‑TSCH RPC 协议服务层
- 注册 RPC 端点:本地
ncalrpcALPC;远程ncacn_ip_tcp(RPC 135 + 动态端口),对外暴露ITaskSchedulerServiceRPC 接口集:SchRpcRegisterTask、SchRpcEnumTasks、SchRpcRun、SchRpcDelete等原语。 - 接收来自
taskschd.dll的 RPC 请求;做权限校验 SD 安全描述符;解析传入 XML 任务报文;执行增删改查;写入磁盘 XML + 更新 TaskCache 注册表双向持久化;返回 RPC 应答报文。
模块 3:触发器调度引擎(多线程异步监听池)
多路触发器并行监听,互不阻塞:
- 高精度定时器线程:时间触发器(每日、每周、每月、一次性)
- EventLog 事件订阅线程:事件触发器,监听 Windows 事件通道
- 会话状态监听:登录 / 注销 / 锁定 / 解锁触发器
- 开机启动触发器、网络状态、电源状态(空闲、电池 / 交流电源)条件判断。
不是简单 “到点就执行”;会叠加任务配置条件:电源、网络、空闲、并发策略、超时、失败重试。全部条件满足,才允许启动任务实例。
模块 4:任务实例执行与状态跟踪模块
- 触发器命中后,解析任务 Principal 身份,构造访问令牌(支持本地账户、域账户、系统、交互式会话)。
- 区分动作类型:
Exec普通 exe 程序:直接调用 CreateProcessAsUser 创建进程。COMHandler:启动taskhostw.exe宿主进程,加载任务 DLL 组件,调用ITaskHandler接口执行业务逻辑。
- 跟踪任务实例 PID、退出码、运行时长;运行结束把
DynamicInfo(上次运行时间、HRESULT 退出码)写回 TaskCache 注册表;写入Microsoft‑Windows‑TaskScheduler/Operational事件日志。 - 维护内存任务队列配额(注册表
Configuration下TasksInMemoryQueue等参数控制最大并发任务数)Microsoft ...。
二、依赖文件清单
服务进程内加载(svchost.exe‑Schedule)
表格
| 文件 | 路径 | 作用 |
|---|---|---|
schedsvc.dll |
System32 | 调度引擎本体;MS‑TSCH 服务端实现;XML 解析;触发器;持久化读写;任务实例管理 |
rpcrt4.dll |
System32 | RPC 运行库,NDR 序列化、ALPC/TCP 端点监听 |
ole32.dll |
System32 | 服务端 COM、安全、令牌模拟 |
advapi32.dll |
System32 | SID 转换、安全描述符 SD、账户凭据解析、CreateProcessAsUser 令牌 |
powrprof.dll |
System32 | 电源状态读取(电池、空闲检测) |
wevtapi.dll |
System32 | 写入 TaskScheduler 事件日志 |
ntdll.dll |
System32 | ALPC 系统调用、内核对象操作 |
外部配套组件(不在 svchost 进程,IPC 交互)
表格
| 文件 | 载体 | 定位 |
|---|---|---|
taskschd.dll |
客户端进程 | COM 代理,MS‑TSCH 客户端封装 |
taskhostw.exe |
独立进程 | COMHandler 类型任务执行宿主;旧版 Win7 为taskhost.exe |
rpcss.exe(RpcSs) |
独立服务 | RPC 端点映射,必须先启动,否则 Schedule 服务无法注册 RPC 端点 |
废弃 V1 组件
mstask.dll:XP V1 任务引擎,.job文件;schedsvc.dll 完全不使用,仅给at.exe做兼容层。
三、持久化存储(schedsvc.dll 唯一读写方,双向同步)
禁止手动编辑 XML / 注册表,会造成索引断裂,任务异常
- XML 任务定义
C:\Windows\System32\Tasks\
明文 XML,完整保存任务配置;schedsvc.dll 负责写入、解析。
- TaskCache 注册表索引
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache
Tree:任务文件夹树,任务路径映射 GUID,存储 ACL 安全描述符 SDTasks\{GUID}:二进制 Blob 缓存:触发器、动作、DynamicInfo 运行时状态Boot / Logon / Plain:按触发器类型分组的 GUID 索引表,加速开机加载调度队列。
- 引擎配置参数
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\Configuration
控制内存队列上限、最大并发任务、超时等全局调度参数Microsoft ...。
四、完整逻辑调用链路示例:创建任务
上层调用方(schtasks.exe / taskschd.msc / PowerShell)
↓taskschd.dll(客户端COM)
封装MS‑TSCH RPC SchRpcRegisterTask,携带XML字符串
↓rpcrt4.dll ALPC本地RPC
→送达 svchost.exe + schedsvc.dll(Schedule服务)
1. schedsvc.dll RPC调度层接收请求
2. 安全校验:调用者SID,任务文件夹SD权限校验
3. XML模式校验,生成任务唯一GUID
4. 写入磁盘:C:\Windows\System32\Tasks\xxx.xml
5. 更新注册表TaskCache Tree / Tasks\{GUID},双向同步
6. 内存实例化任务对象,注册触发器到调度监听池
↑RPC返回成功/失败HRESULT
上层得到结果,打印输出。
任务触发执行链路(无客户端参与,纯 schedsvc.dll 内部)
- schedsvc.dll 触发器监听线程检测条件满足(时间 / 事件 / 登录)
- 校验任务附加条件:电源、网络、空闲、并发策略
- 解析 Principal,构建安全令牌
- Exec 动作:调用 CreateProcessAsUser 启动 exe;COMHandler 动作:启动 taskhostw.exe
- 跟踪实例生命周期;任务结束,更新 TaskCache 中 DynamicInfo(上次运行时间、退出码);写入事件日志。
五、配套依赖服务(启动时序约束)
RpcSs(Remote Procedure Call)RPC 基础;不运行则 Schedule 服务无法注册 RPC 端点RpcEptMapperRPC 端点映射器DcomLaunchDCOM 进程启动EventLog事件日志写入Schedule本服务,依赖以上服务;冷启动时如果依赖未就绪会启动失败。
远程场景:目标主机防火墙开放 RPC 135 端口 + 动态端口。
六、上层调用方(全部走 schedsvc.dll MS‑TSCH 服务端)
- schtasks.exe CLI;taskschd.msc MMC;PowerShell ScheduledTasks 模块;VBS
Schedule.Service;第三方 C/C++ 程序;全部经由 taskschd.dll RPC,最终交给schedsvc.dll处理。
七、典型故障与坑点
- 直接修改 XML / 注册表:磁盘与 TaskCache 索引不一致;内存调度对象不变;任务不触发、MMC 看不到任务,但服务内存中仍然存在;修复:重启 Schedule 服务,重新加载磁盘与注册表。
- TaskCache 损坏:任务存在但无法枚举、无法运行;事件日志报错;需要重建 TaskCache 索引。
- Schedule 服务崩溃:schedsvc.dll 异常;全部任务停止调度;schtasks、taskschd.msc 报 RPC 服务器不可用。
- 队列满:注册表
TasksInMemoryQueue达到上限,新任务丢弃,事件 ID131Microsoft ...。 - 权限校验全部在schedsvc.dll 服务端;taskschd.dll 客户端不做权限判断。
八、演进
- Vista 引入 V2 架构:
schedsvc.dll正式登场,替代 XP 时代mstask.dllV1 引擎; - Win8.1+ Schedule 服务启用 PLP 受保护轻进程,对抗恶意注入篡改;
- Win10/Win11 持续扩展触发器、后台任务,但 MS‑TSCH 协议、schedsvc.dll 整体架构向下兼容。
C:\Windows\System32\Tasks 是 Windows 操作系统中存储计划任务的文件夹。该文件夹包含了所有通过 Windows 任务计划程序 (Task Scheduler) 创建的任务的配置文件。每个任务通常以 XML 格式存储,并包含有关该任务的详细信息,例如任务的触发条件、运行程序、执行时间、权限等。
相关内容:
-
任务存储:
- 每个计划任务都有一个对应的文件夹和 XML 文件,通常该文件的名称与任务名称相同。
- 例如,如果你创建了一个名为 "BackupTask" 的计划任务,你将能够在
C:\Windows\System32\Tasks文件夹中找到一个名为 "BackupTask" 的文件,它存储了该任务的设置。
-
访问和管理任务:
- 你可以通过任务计划程序 (
Task Scheduler) 管理这些任务,而不必直接访问C:\Windows\System32\Tasks文件夹。 - 直接编辑文件夹中的任务文件需要管理员权限,因为该文件夹是系统保护的。
- 你可以通过任务计划程序 (
-
任务文件格式:
- 这些文件是 XML 格式,包含任务的详细信息,如触发器(例如,按时间表或事件触发)、操作(例如,启动程序)和条件(例如,系统空闲时执行)。
-
使用
SCHTASKS命令时的关系:- 当你通过
SCHTASKS创建、修改或删除任务时,操作实际上会影响C:\Windows\System32\Tasks文件夹中的任务配置文件。
- 当你通过
举个例子:
- 假设你创建了一个任务,并命名为
MyTask,并设置为每天早上 8 点执行C:\MyScript.bat,那么在C:\Windows\System32\Tasks文件夹中,会生成一个名为MyTask的文件,里面存储了该任务的详细配置信息。
注意:
- 直接操作该文件夹中的任务文件时要非常小心,因为错误的修改可能会导致计划任务无法正常运行,甚至可能破坏系统稳定性。
- 对于需要修改任务的情况,建议通过 Windows 的任务计划程序界面或
SCHTASKS命令进行操作,而不是直接编辑这些 XML 文件。
%systemroot% 是一个环境变量,通常指向Windows操作系统的安装目录。在大多数情况下,它指向 C:\Windows 目录。使用 %systemroot% 环境变量可以使系统更加灵活和可移植,因为无论Windows操作系统安装在哪个驱动器上,都可以通过这个环境变量来引用Windows目录。
关于基础技术原理,%systemroot% 环境变量涉及到以下方面的基础技术:
-
环境变量:环境变量是操作系统中用来存储特定信息的动态值。它们对于配置和控制应用程序行为非常重要。
-
系统路径:
%systemroot%在系统中被广泛使用,特别是在批处理脚本和命令行操作中。了解系统路径的设置和使用可以帮助管理和维护Windows系统。 -
操作系统结构:
%systemroot%的存在反映了操作系统的结构设计,即将系统文件和核心组件存放在一个独立的目录中,便于管理和维护。 -
系统部署和管理:在系统部署和管理过程中,了解和利用
%systemroot%变量可以帮助管理员更好地管理系统资源,并编写更具可移植性的脚本和配置。
总的来说,%systemroot% 环境变量涉及到操作系统的结构、环境变量的使用和系统管理等基础技术原理。
除了 %systemroot%,在Windows操作系统中还有一些其他常用的环境变量,它们在系统管理和应用程序开发中发挥着重要作用。以下是一些常见的Windows环境变量及其作用:
-
%USERPROFILE%:指向当前用户的个人文件夹,通常为
C:\Users\用户名。这个变量可以帮助访问用户的个人文件和设置。 -
%PATH%:包含一组目录路径,系统会在这些路径中查找可执行文件。通过将程序的可执行文件路径添加到
%PATH%中,可以在命令行中直接执行该程序。 -
%TEMP% 和 %TMP%:分别指向用于存储临时文件的目录。程序可以使用这些变量来保存临时数据,并确保在不同系统上具有一致的行为。
-
%PROGRAMFILES% 和 %PROGRAMFILES(x86)%:分别指向安装的应用程序的默认目录。
%PROGRAMFILES%在64位系统上指向C:\Program Files,而%PROGRAMFILES(x86)%则指向C:\Program Files (x86)。 -
%SystemDrive%:指向系统安装所在的驱动器。通常为
C:,但在某些情况下可能会安装在其他驱动器上。 -
%COMPUTERNAME%:指向计算机的名称,用于标识网络中的计算机。
-
%USERNAME%:指向当前登录用户的用户名。
这些环境变量在Windows系统中被广泛使用,可以简化系统管理、脚本编写和应用程序开发过程中的路径和配置管理。
除了之前提到的环境变量之外,Windows操作系统还有一些其他常用的环境变量,它们在系统管理和应用程序开发中也都有各自的作用。以下是另外一些常见的Windows环境变量及其作用:
-
%APPDATA%:指向当前用户的应用程序数据目录,通常为
C:\Users\用户名\AppData\Roaming。这个变量用于存储应用程序的设置和数据。 -
%HOMEPATH%:指向当前用户的用户文件夹路径(不包括驱动器信息),通常为
\Users\用户名。 -
%LOGONSERVER%:指向处理当前登录请求的域控制器的名称。
-
%OS%:指向当前操作系统的名称。
-
%NUMBER_OF_PROCESSORS% 和 %PROCESSOR_ARCHITECTURE%:分别指向系统中安装的处理器数量和处理器架构。
-
%SystemRoot%:与
%systemroot%类似,都指向Windows系统的安装目录。 -
%TEMP% 和 %TMP%:这两个变量也被广泛使用,它们分别指向用于存储临时文件的目录。
这些环境变量在Windows系统中起着重要的作用,能够简化系统配置、管理和应用程序开发过程中的路径和设置管理。通过合理利用这些环境变量,可以使系统更加灵活、可移植和易于管理。
Windows操作系统还有一些其他常用的环境变量。以下是另外一些常见的Windows环境变量及其作用:
-
%ALLUSERSPROFILE%:指向所有用户共享的配置文件和数据的目录,通常为
C:\ProgramData。 -
%PUBLIC%:指向公共文件夹的路径,通常为
C:\Users\Public。 -
%COMSPEC%:指向命令解释器的可执行文件路径,默认为
C:\Windows\System32\cmd.exe。 -
%SystemDrive% 和 %SystemRoot%:
%SystemDrive%指向系统安装所在的驱动器,通常为C:;%SystemRoot%则指向Windows系统目录,通常为%SystemDrive%\Windows。 -
%ProgramData%:指向程序数据的默认存储位置,通常为
C:\ProgramData。 -
%CommonProgramFiles% 和 %CommonProgramFiles(x86)%:分别指向用于存储共享程序文件的目录,通常为
C:\Program Files\Common Files和C:\Program Files (x86)\Common Files。 -
%USERDOMAIN%:指向当前用户所属的域名。
以下是另外一些常见的Windows环境变量及其作用:
-
%USERDOMAIN_ROAMINGPROFILE%:指向用户域的漫游配置文件路径。
-
%APPDATA%:指向当前用户的应用程序数据目录,通常为
C:\Users\用户名\AppData\Roaming。这个变量用于存储应用程序的设置和数据。 -
%LOCALAPPDATA%:指向当前用户的本地应用程序数据目录,通常为
C:\Users\用户名\AppData\Local。这个变量用于存储应用程序的本地设置和数据。 -
%PUBLIC%:指向公共文件夹的路径,通常为
C:\Users\Public。该变量用于访问公共文件夹中的内容。 -
%USERPROFILE%:指向当前用户的个人文件夹,通常为
C:\Users\用户名。可以使用这个变量来访问用户的个人文件和设置。 -
%SystemDrive% 和 %SystemRoot%:
%SystemDrive%指向系统安装所在的驱动器,通常为C:;%SystemRoot%则指向Windows系统目录,通常为%SystemDrive%\Windows。 -
%SESSIONNAME%:指示当前会话的名称。
|
SCHTASKS /parameter [arguments] 描述: 参数列表: /Delete 删除定时任务。 /Query 显示所有定时任务。 /Change 更改定时任务的属性。 /Run 按需运行定时任务。 /End 停止当前正在运行的定时任务。 /ShowSid 显示与定时任务名称对应的安全标识符。 /? 显示此帮助消息。 |
|
schtasks /create /? SCHTASKS /Create [/S system [/U username [/P [password]]]] Description: Parameter List: /U username Specifies the user context under which SchTasks.exe /P [password] Specifies the password for the given user context. /RU username Specifies the "run as" user account (user context) /RP [password] Specifies the password for the "run as" user. /SC schedule Specifies the schedule frequency. /MO modifier Refines the schedule type to allow finer control over /D days Specifies the day of the week to run the task. Valid /M months Specifies month(s) of the year. Defaults to the first /I idletime Specifies the amount of idle time to wait before /TN taskname Specifies the string in the form of path\name /TR taskrun Specifies the path and file name of the program to be /ST starttime Specifies the start time to run the task. The time /RI interval Specifies the repetition interval in minutes. This is /ET endtime Specifies the end time to run the task. The time format /DU duration Specifies the duration to run the task. The time /K Terminates the task at the endtime or duration time. /SD startdate Specifies the first date on which the task runs. The /ED enddate Specifies the last date when the task should run. The /EC ChannelName Specifies the event channel for OnEvent triggers. /IT Enables the task to run interactively only if the /RU /NP No password is stored. The task runs non-interactively /Z Marks the task for deletion after its final run. /XML xmlfile Creates a task from the task XML specified in a file. /V1 Creates a task visible to pre-Vista platforms. /F Forcefully creates the task and suppresses warnings if /RL level Sets the Run Level for the job. Valid values are /DELAY delaytime Specifies the wait time to delay the running of the /HRESULT For better diagnosability, the process exit code /? Displays this help message. Modifiers: Valid values for the /MO switch per schedule type: ONEVENT: XPath event query string. SCHTASKS /Create /S ABC /U user /P password /RU runasuser ==> Creates a scheduled task "accountant" on the remote machine SCHTASKS /Create /S ABC /U domain\user /P password /SC MINUTE ==> Creates a scheduled task "gametime" to run freecell on the SCHTASKS /Create /SC MONTHLY /MO first /D SUN /TN gametime ==> Creates a scheduled task "report" on remote machine "ABC" SCHTASKS /Create /S ABC /U user /P password /RU runasuser ==> Creates a scheduled task "logtracker" on remote machine "ABC" SCHTASKS /Create /S ABC /U domain\user /P password /SC MINUTE ==> Creates a scheduled task "gaming" to run freecell.exe starting SCHTASKS /Create /SC DAILY /TN gaming /TR c:\freecell /ST 12:00 SCHTASKS /Create /TN EventLog /TR wevtvwr.msc /SC ONEVENT |
schtasks /create /? SCHTASKS /Create [/S system [/U username [/P [password]]]] 描述: 参数列表: /U username 指定 SchTasks.exe 应以哪个用户上下文执行。 /P [password] 指定给定用户上下文的密码。如果省略,则会提示输入密码。 /RU username 指定任务运行的“作为”用户帐户(用户上下文)。对于系统帐户,有效值为""、"NT AUTHORITY\SYSTEM"或"SYSTEM"。 /RP [password] 指定“作为”用户的密码。如需提示输入密码,值必须是“*”或无。此密码对于系统帐户无效。必须与/RU或/XML开关结合使用。 /SC schedule 指定计划频率。 /MO modifier 通过细化调度类型,允许更精细地控制调度重复。有效值列在下面的“修饰符”部分中。 /D days 指定每周运行任务的日期。有效值:MON、TUE、WED、THU、FRI、SAT、SUN,对于MONTHLY调度为1-31(每月的日期)。 /M months 指定一年中的月份。默认为该月的第一天。有效值:JAN、FEB、MAR、APR、MAY、JUN、JUL、AUG、SEP、OCT、NOV、DEC。通配符“*”表示所有月份。 /I idletime 指定等待运行预定的ONIDLE任务之前的空闲时间量。 /TN taskname 指定以路径\名称形式的字符串,唯一标识此定时任务。 /TR taskrun 指定要在预定时间运行的程序的路径和文件名。 /ST starttime 指定运行任务的开始时间。时间格式为HH:mm(24小时制),例如,14:30表示下午2:30。如果未指定/ST,则默认为当前时间。对于/SC ONCE,此选项是必需的。 /RI interval 指定重复间隔(以分钟为单位)。不适用于计划类型:MINUTE、HOURLY、ONSTART、ONLOGON、ONIDLE、ONEVENT。 /ET endtime 指定任务结束时间。时间格式为HH:mm(24小时制),例如,14:50表示下午2:50。不适用于计划类型:ONSTART、ONLOGON、ONIDLE、ONEVENT。 /DU duration 指定任务运行的持续时间。时间格式为HH:mm。不适用于/ET和计划类型:ONSTART、ONLOGON、ONIDLE、ONEVENT。 /K 在结束时间或持续时间到达时终止任务。不适用于计划类型:ONSTART、ONLOGON、ONIDLE、ONEVENT。必须指定/Et或/DU。 /SD startdate 指定任务运行的第一个日期。格式为yyyy/mm/dd。默认为当前日期。不适用于计划类型:ONCE、ONSTART、ONLOGON、ONIDLE、ONEVENT。 /ED enddate 指定任务应该运行的最后日期。格式为yyyy/mm/dd。不适用于计划类型:ONCE、ONSTART、ONLOGON、ONIDLE、ONEVENT。 /EC ChannelName 指定OnEvent触发器的事件通道。 /IT 仅当/RU用户在作业运行时当前已登录时,才启用任务以交互方式运行。仅当用户已登录时,此任务才会运行。 /NP 不存储密码。以给定用户身份非交互方式运行任务。只有本地资源可用。 /Z 标记任务在最后一次运行后删除。 /XML xmlfile 使用文件中指定的任务XML创建任务。可以与/RU和/RP开关结合使用,或仅与/RP结合使用,当任务XML已包含主体时。 /V1 创建一个对较早版本可见的任务。 /F 强制创建任务,并抑制如果指定任务已存在时的警告。 /RL level 设置作业的运行级别。有效值为LIMITED和HIGHEST。默认值为LIMITED。 /DELAY delaytime 指定触发器触发后运行任务的等待时间。时间格式为mmmm:ss。此选项仅适用于计划类型ONSTART、ONLOGON、ONEVENT。 /HRESULT 为了更好地诊断,进程退出代码将采用HRESULT格式。 /? 显示此帮助消息。 ONEVENT: XPath事件查询字符串。 SCHTASKS /Create /S ABC /U user /P password /RU runasuser ==> 在远程计算机“ABC”上创建一个名为“accountant”的定时任务,从指定的开始时间到结束时间每五分钟运行一次calc.exe,在指定的开始日期和结束日期之间运行。 SCHTASKS /Create /S ABC /U domain\user /P password /SC MINUTE ==> 创建一个名为“gametime”的定时任务,在每个月的第一个星期日运行freecell。 SCHTASKS /Create /SC MONTHLY /MO first /D SUN /TN gametime ==> 在远程计算机“ABC”上创建一个名为“report”的定时任务,每周运行notepad.exe。 SCHTASKS /Create /S ABC /U user /P password /RU runasuser ==> 在远程计算机“ABC”上创建一个名为“logtracker”的定时任务,每五分钟从指定的开始时间开始运行notepad.exe,没有结束时间。将提示输入/RP密码。 SCHTASKS /Create /S ABC /U domain\user /P password /SC MINUTE ==> 创建一个名为“gaming”的定时任务,每天从12:00开始运行freecell.exe,并在14:00自动终止。 SCHTASKS /Create /SC DAILY /TN gaming /TR c:\freecell /ST 12:00 ==> 创建一个名为“EventLog”的定时任务,当System通道中发布事件101时开始运行wevtvwr.msc。 SCHTASKS /Create /TN EventLog /TR wevtvwr.msc /SC ONEVENT ==> 文件路径中的空格可以通过使用两组引号来实现,一组用于CMD.EXE,一组用于SchTasks.exe。CMD的外部引号需要是双引号;内部引号可以是单引号或转义双引号: |
|
SCHTASKS /Run /? SCHTASKS /Run [/S system [/U username [/P [password]]]] [/I] Description: Parameter List: /U username Specifies the user context under /P [password] Specifies the password for the given /I Runs the task immediately by ignoring any constraint. /TN taskname Specifies the path\name of the task to run now. /HRESULT For better diagnosability, the process exit code /? Displays this help message. Examples: |
SCHTASKS /Run /? 描述: 参数列表: /U username 指定 schtasks.exe 应在哪个用户上下文中执行。 /P [password] 指定给定用户上下文的密码。如果省略,则会提示输入。 /I 通过忽略任何约束条件立即运行任务。 /TN taskname 指定要立即运行的任务的路径\名称。 /HRESULT 为了更好的诊断能力,进程退出代码将以 HRESULT 格式显示。 /? 显示此帮助消息。 |
|
SCHTASKS /End /? SCHTASKS /End [/S system [/U username [/P [password]]]] Description: Parameter List: /U username Specifies the user context under /P [password] Specifies the password for the given /TN taskname Specifies the path\name of the task to terminate. /HRESULT For better diagnosability, the process exit code /? Displays this help message. Examples: |
SCHTASKS /End /? 描述: 参数列表: /U username 指定 schtasks.exe 应在哪个用户上下文中执行。 /P [password] 指定给定用户上下文的密码。如果省略,则会提示输入。 /TN taskname 指定要终止的任务的路径\名称。 /HRESULT 为了更好的诊断能力,进程退出代码将以 HRESULT 格式显示。 /? 显示此帮助消息。 |
|
SCHTASKS /Query /? SCHTASKS /Query [/S system [/U username [/P [password]]]] Description: Parameter List: /U username Specifies the user context under /P [password] Specifies the password for the given /FO format Specifies the format for the output. /NH Specifies that the column header should not /V Displays verbose task output. /TN taskname Specifies the task path\name for which /XML [xml_type] Displays task definitions in XML format. If xml_type is ONE then the output will be one valid XML file. If xml_type is not present then the output will be the concatenation of all XML task definitions. /HRESULT For better diagnosability, the process exit code /? Displays this help message. Examples: |
SCHTASKS /Query /? 描述: 允许管理员显示本地或远程系统上的预定任务。 参数列表: /S system 指定要连接的远程系统。
示例: SCHTASKS /Query SCHTASKS /Query /? SCHTASKS /Query /S system /U user /P password SCHTASKS /Query /FO LIST /V /S system /U user /P password SCHTASKS /Query /FO TABLE /NH /V |
|
SCHTASKS /Change /? SCHTASKS /Change [/S system [/U username [/P [password]]]] /TN taskname Description: Parameter List: /U username Specifies the user context under which schtasks.exe /P [password] Specifies the password for the given user context. /TN taskname Specifies the path\name of the task to change. /RU username Changes the user name (user context) under which the /TR taskrun Specifies the new program that the /ST starttime Specifies the start time to run the task. The time /RI interval Specifies the repetition interval in /ET endtime Specifies the end time to run the task. The time /DU duration Specifies the duration to run the task. The time /K Terminates the task at the endtime or duration time. /SD startdate Specifies the first date on which the task runs. /ED enddate Specifies the last date when the task should run. /IT Enables the task to run interactively only if the /RL level Sets the Run Level for the job. Valid values are /ENABLE Enables the scheduled task. /DISABLE Disables the scheduled task. /Z Marks the task for deletion after its final run. /DELAY delaytime Specifies the wait time to delay the running of the /HRESULT For better diagnosability, the process exit code /? Displays this help message. Examples: |
SCHTASKS /Change /? 描述: 参数列表: /U username 指定 schtasks.exe 应在哪个用户上下文中执行。 /P [password] 指定给定用户上下文的密码。如果省略,则会提示输入。 /TN taskname 指定要更改的任务的路径\名称。 /RU username 更改计划任务要运行的用户名(用户上下文)。对于系统账户,有效值为""、"NT AUTHORITY\SYSTEM"或"SYSTEM"。 /TR taskrun 指定计划任务将运行的新程序。 /ST starttime 指定任务运行的开始时间。时间格式为 HH:mm(24小时制),例如,14:30 表示下午2:30。 /RI interval 指定重复间隔时间(分钟)。有效范围:1 - 599940 分钟。 /ET endtime 指定任务结束运行的时间。时间格式为 HH:mm(24小时制),例如,14:50 表示下午2:50。 /DU duration 指定任务运行的持续时间。时间格式为 HH:mm。与 /ET 选项不适用。 /K 在结束时间或持续时间到达时终止任务。 /SD startdate 指定任务开始运行的第一个日期。格式为 yyyy/mm/dd。 /ED enddate 指定任务应该运行的最后一个日期。格式为 yyyy/mm/dd。 /IT 仅当 /RU 用户当前登录时,允许任务以交互方式运行。只有在用户登录时任务才会运行。 /RL level 设置作业的运行级别。有效值为 LIMITED 和 HIGHEST。默认情况下不更改。 /ENABLE 启用计划任务。 /DISABLE 禁用计划任务。 /Z 在最后一次运行后标记任务以删除。 /DELAY delaytime 指定触发器触发后延迟运行任务的等待时间。时间格式为 mmmm:ss。此选项仅适用于计划类型 ONSTART、ONLOGON、ONEVENT。 /HRESULT 为了更好的诊断能力,进程退出代码将以 HRESULT 格式显示。 /? 显示此帮助消息。 |
|
SCHTASKS /ShowSid /? SCHTASKS /ShowSid /TN taskname [/HRESULT] [/?] Description: Parameter List: /HRESULT For better diagnosability, the process exit code /? Displays this help message. Examples: |
SCHTASKS /ShowSid /? 描述: 显示计划任务专用用户的 SID。 参数列表: /TN taskname 指定计划任务的路径\名称。
示例: SCHTASKS /ShowSid /? SCHTASKS /ShowSid /TN "\Backup\Start Backup" |
|
SCHTASKS /Delete /? SCHTASKS /Delete [/S system [/U username [/P [password]]]] Description: Parameter List: /U username Specifies the user context under /P [password] Specifies the password for the given /TN taskname Specifies the path\name of the task to delete. /F Forcefully deletes the task and suppresses /HRESULT For better diagnosability, the process exit code /? Displays this help message. Examples: |
SCHTASKS /Delete /? 描述: 删除一个或多个计划任务。 参数列表: /S system 指定要连接的远程系统。
示例: SCHTASKS /Delete /TN * /F SCHTASKS /Delete /TN "\Backup\Backup and Restore" SCHTASKS /Delete /S system /U user /P password /TN "\Backup\Start Restore" SCHTASKS /Delete /S system /U user /P password /TN "\Backup\Start Backup" /F |

浙公网安备 33010602011771号