内容
<h1 align="center">
<img src="WinTask%20Logo.png" alt="任务调度器工作室" height="60"><br>
任务调度器工作室
</h1>
<h4 align="center">现代、流畅的 WinUI 3 重构版 Windows 任务调度器,支持自然语言任务创建和本地 MCP 服务器供 AI 代理使用。</h4>
<p align="center">
<a href="#概述">概述</a> •
<a href="#解决方案布局">解决方案布局</a> •
<a href="#脚本库">脚本库</a> •
<a href="#构建和运行">构建和运行</a> •
<a href="#MCP 服务器">MCP 服务器</a> •
<a href="#许可证">许可证</a>
</p>

## 概述
任务调度器工作室是 Windows 内置任务调度器的现代 WinUI 3 重构版。它通过任务调度器 V2 COM API 读取和写入实时 Windows 任务调度器存储,因此您创建的每个任务都是一个普通的调度任务:在 `taskschd.msc` 中可见,可以使用 `schtasks` 查询,并且可以与内置工具完全互操作。没有单独的数据库 - 在任一工具中创建任务,它在另一个工具中显示、运行和编辑完全相同。
该应用程序将该引擎与清洁的 Fluent 界面和可选的 AI 配对。内置的 GitHub Copilot 助手允许您用纯英文创建和管理任务,并且捆绑的本地 MCP 服务器向您喜欢的 AI 代理公开相同的引擎,因此 UI 和代理始终表现相同。
> **免责声明:** 任务调度器工作室由微软员工作为个人项目和概念验证创建。它 **不是** 官方微软产品、服务或提供的内容,**不受微软支持或关联**。所有工作和意见均为开发人员所有。
<sub>该项目是在 GitHub Copilot 等 AI 编码工具的帮助下构建的。</sub>
## 为什么它是跨兼容的
任务调度器工作室通过成熟的 `Microsoft.Win32.TaskScheduler`托管包装器与 **任务调度器 V2 COM API** (`Schedule.Service`) 进行通信。这与内置任务调度器使用的 API 和任务存储相同 - 没有单独的数据库。任务调度器工作室创建的任何内容都是一个普通的调度任务:在 `taskschd.msc` 中可见,可以使用 `schtasks` 查询,并支持标准的任务调度器 XML 交换格式(导入/导出兼容)。
## 解决方案布局
| 项目 | 类型 | 目的 |
|---------|------|---------|
| `Tasker.Core` | 类库 | 真相的单一来源:`TaskerService`包装 COM API 并公开可序列化的 DTO(文件夹、任务、触发器、操作、设置)。 |
| `Tasker.App` | WinUI 3 应用程序 | 桌面 UI - 文件夹树、任务可搜索表格、丰富的详细信息窗格、带有原始 XML 转义门的选项卡式创建/编辑编辑器,以及自然语言 **Copilot 助手**。 |
| `Tasker.Mcp` | 控制台应用程序 | 本地 stdio **MCP** 服务器,向代理公开相同的引擎。 |
由于 UI 和 MCP 服务器都调用 `Tasker.Core`,因此它们的行为始终相同。
## 脚本库
**库** 页面提供约 20 个现成的、安全的可 PowerShell 自动化脚本(清理、备份、维护、监视和系统任务),以及您自己的已保存脚本。每个内置脚本都打开一个带有清晰注释的 **设置块**,以便轻松调整,并在预览中显示为友好输入。当您选择 **创建任务** 时,(可能已编辑的)脚本被写入 ` %LOCALAPPDATA%\WindowsTasker\scripts` 下的真实 `.ps1` 文件,并作为预构建操作交给可视化 **设计器**,因此您只需选择一个计划。您还可以在设计器的 **添加操作 → 从脚本库** 中添加脚本。
- **设计安全:** 对您文件的删除会进入回收站;只有暂时的缓存/临时文件才会被硬删除(有范围、尽力而为)。每个脚本都运行 `-NoProfile -ExecutionPolicy Bypass`,并且在创建任务之前会显示供审查。需要提升的脚本会被标记并切换到“以最高权限运行”。
- **通知:** 提醒和低磁盘空间脚本会显示真正的 **Windows 11 Toast**,无需安装模块或注册应用程序(它们借用了任务调度器工作室自己的 AUMID,备用文件资源管理器)。
- **您自己的脚本:** 创建、编辑、复制(来自内置)、删除您的脚本;它们存储在 `%LOCALAPPDATA%\WindowsTasker\script-library.json` 中作为 JSON。
## 使用自然语言创建任务(GitHub Copilot SDK)
**助手** 页面嵌入了官方的 [GitHub Copilot SDK](https://github.com/github/copilot-sdk)(`GitHub.Copilot.SDK`)。用纯英文描述您想要的内容 - *“每天在下午 6 点运行 backup.cmd”* - 然后 Copilot 代理运行一个引导流程:它询问任何缺失的内容(名称、要运行的程序、计划)、确认,然后调用任务调度器工作室工具(`create_task`、`create_task_from_xml`、`list_folders`、`list_tasks`)- **与 MCP 服务器公开的工具相同**,并由共享引擎支持 - 将任务写入实时 Windows 存储。
- **身份验证:** 点击助手页面上的 **使用 GitHub 登录** - 它使用 GitHub CLI(`gh`)进行交互式身份验证,重用现有的 `gh` 会话(如果存在),或打开 GitHub 网页登录。您还可以粘贴 GitHub 令牌,或直接聊天以使用现有的 Copilot 会话。需要 Copilot 订阅。
- **锁定:** 助手在多个层面上加强保护 - 专用 **AGENTS.md** 和系统提示限制它仅限于调度任务工作,并且严格的 **权限处理程序** 仅允许任务调度器工作室任务工具执行,拒绝 shell、文件、网络、内存和所有其他内置功能(已验证:一个 jailbreak 提示,询问它运行 shell 命令被拒绝,什么也没发生)。工具输入被验证,破坏性操作需要确认。
- **建议的提示:** 像 *扫描任务的危险信号* (在您的任务上运行 `analyze_task` 并报告基于证据的发现)、*什么在启动时运行?* 和 *每天运行 Notepad* 一样的快速提示。
## 构建和运行
先决条件:Windows 10 1903+,.NET 10 SDK,开发者模式和 `winapp` CLI(`winget install Microsoft.WinAppCli`)。
```powershell
# 构建所有内容
dotnet build WinTaskScheduler.slnx -c Debug
# 运行桌面应用程序(使用 WinUI 开发工作流助手)
cd Tasker.App
./BuildAndRun.ps1 # 或:winapp run <build-output-folder>
```
> **提升:** 创建需要 **以最高权限运行** 的任务,或在 `\Microsoft\Windows\…` 下编辑受保护的系统任务,需要以管理员身份运行任务调度器工作室(或 MCP 服务器)- 与内置工具完全相同。日常用户任务无需提升即可工作。
## MCP 服务器
`Tasker.Mcp` 通过 stdio(换行分隔的 JSON-RPC 2.0)公开模型上下文协议。
### 工具
| 工具 | 描述 |
|------|-------------|
| `list_folders` | 带有任务计数的任务调度器文件夹树。 |
| `list_tasks` | 文件夹中的任务(可选递归/过滤)以及状态、下一次/上一次运行、结果和触发器/操作摘要。 |
| `get_task` | 任务的完整定义,包括原始 XML。 |
| `export_task_xml` | 任务的可移植任务调度器 XML。 |
| `analyze_task` | **基于证据的风险评估** - 一个风险级别加上每个引用的确切命令/触发器/主体/设置(例如编码 PowerShell、下载并运行、从用户可写路径运行、隐藏+提升+自动启动)。 |
| `run_task` / `stop_task` | 按需启动/结束任务。 |
| `enable_task` / `disable_task` | 切换任务。 |
| `delete_task` | 永久删除任务。 |
| `get_running_tasks` | 当前正在运行的实例(带有引擎 PID)。 |
| `create_task` | 从结构化的 `triggers`+`actions` **或** 原始 `xml` 创建或更新任务。 |
### 用 MCP 客户端注册
**最简单的方法:** 打开应用程序的 **关于** 页面,然后单击 **为 Copilot CLI 安装** 或 **为 VS Code 安装** - 每个都将 `wintask-scheduler` 条目合并到正确的文件配置中(保留现有的任何内容),指向捆绑的服务器。之后请重新启动 CLI/编辑器。
要手动执行此操作,请设置 MCP 客户端的启动命令。**当应用程序安装**(来自 Microsoft Store 或 MSIX 包)时,它会注册一个稳定的应用程序执行别名,因此命令只是 `WinTaskSchedulerMcp.exe` - Windows 从 `%LOCALAPPDATA%\Microsoft\WindowsApps` (在 `PATH` 上)解析到已安装的服务器,并且它在应用程序更新时保持有效,而不管安装位置如何。对于 **未打包的开发运行**,请使用生成的 `Tasker.Mcp.exe` 的绝对路径。
**GitHub Copilot CLI** - `~/.copilot/mcp-config.json`:
```json
{
"mcpServers": {
"wintask-scheduler": {
"type": "stdio",
"command": "WinTaskSchedulerMcp.exe",
"args": [],
"tools": []
}
}
}
```
一键安装程序会自动写入此别名。对于未打包的开发版本,请将命令替换为生成的服务器的绝对路径,例如 `Tasker.App\bin\x64\Debug\net10.0-windows10.0.26100.0\win-x64\mcp\Tasker.Mcp.exe`。
**VS Code** (代理模式)- `%APPDATA%\Code\User\mcp.json`(或每个工作区的 `.vscode/mcp.json`):
```json
{
"servers": {
"wintask-scheduler": {
"type": "stdio",
"command": "WinTaskSchedulerMcp.exe",
"args": []
}
}
}
```
**通用/其他客户端** - 任何启动本地 stdio 服务器的 MCP 主机都有效:
```json
{
"mcpServers": {
"wintask-scheduler": {
"command": "dotnet",
"args": ["run", "--project", "D:\\Windows Tasker\\Tasker.Mcp\\Tasker.Mcp.csproj", "-c", "Debug"]
}
}
}
```
### 代理调用示例
```jsonc
// 工具/调用 create_task
{
"name": "夜间备份",
"folder": "\\MyApps",
"description": "每晚运行备份脚本",
"principal": { "runWithHighestPrivileges": false },
"triggers": [
{ "kind": "daily", "startBoundary": "2026-01-01T02:00:00", "daysInterval": 1 }
],
"actions": [
{ "command": "C:\\Scripts\\backup.cmd", "arguments": "--full" }
]
}
```
结构化编辑器和 `create_task` 了解常见的触发器类型(`oneTime`、`daily`、`weekly`、`monthly`、`atStartup`、`atLogOn`、`onIdle`)。对于其他任何内容 - 事件触发器、COM 处理程序操作、异国设置 - 请传递完整的 **原始 XML**(UI:*高级* 选项卡;MCP:`xml` 字段),该字段原样注册以实现 100% 保真度。
## 质量生活额外功能(超出内置任务调度器)
- **自然语言任务创建和管理** 通过 Copilot 助手 - 它还可以运行、启用/禁用、删除和回答有关任务的问题(“什么在启动时运行?”)。
- **运行历史记录** - 任务的事件日志(来自 `Microsoft-Windows-TaskScheduler/Operational`)在详细信息窗格中。
- **文件夹选择器** 在创建/编辑时,以及从树形工具栏 **创建/删除文件夹**。
- **复制任务**,以及用于常见食谱的 **模板**(“新建任务” ▾)。
- **可排序的列**(单击标题)和 **实时搜索** 跨名称、操作、触发器、作者。
- **多选批量操作** - 一次运行/启用/禁用/删除多个任务。
- **丰富的触发器编辑器** - 一次、每天、每周、每月(按天)、每月(按星期几)、在启动时、在登录时、在空闲时、在事件时、在会话状态更改时,以及重复和到期。
- **以不同用户身份运行** - 交互式、存储密码、S4U 或 SYSTEM。
- **备份/恢复** 整个任务文件夹作为 XML 的 zip。
- **即将运行** 视图(所有内容按下一次运行时间排序)和 **toast 通知** 当您启动的任务完成时。
- **以管理员身份重启** 用于提升操作;**自动刷新** 当助手更改任务时;**markdown 渲染** 助手回复。
- **外观** (关于页面)- 切换窗口 **背景**(Mica Alt · Mica · 亚克力)和 **主题**(系统 · 浅色 · 深色);选择在重启后持久存在。
- **可调整大小的详细信息窗格** - 拖动任务页面上的分隔条以增大检查/ XML 区域。
## 测试
`ui-tests.ps1` 通过 `winapp ui` 自动化驱动正在运行的应用程序(导航、编辑器、从 `schtasks` 验证的端到端创建以及 AutomationId 可访问性审核):
```powershell
./ui-tests.ps1 -AppPid <pid-of-running-app>
```
## 许可证
任务调度器工作室的源代码在其 **MIT License** 下发布 - 请参阅 [`LICENSE`](LICENSE)。它仅依赖于允许的(MIT)库以及微软的 Windows 应用程序 SDK / Windows SDK 构建工具,根据微软的许可条款,允许在您构建的应用程序中重新分发。第三方组件及其许可证列在 [`THIRD-PARTY-NOTICES.md`](THIRD-PARTY-NOTICES.md) 中。
## 隐私
应用程序在本地运行,开发者不会收集任何个人数据。可选功能(GitHub Copilot 助手和 GitHub 登录)仅在您选择使用它们时将数据发送到 GitHub。请参阅 [`PRIVACY.md`](PRIVACY.md) 以获取完整的隐私政策。