实战

用 Codex CLI + Windows 任务计划程序实现自动化日报:零脚本也能跑通

2026/10/34 分钟阅读

为什么要用 Windows 任务计划程序?

大多数 Codex 定时任务教程都在教 Linux 的 cron,但 Windows 用户怎么办?答案是:Windows 自带"任务计划程序",无需装第三方工具,图形界面配好后 Codex 自动在后台跑。

这条链路的本质是:

Windows 任务计划程序 → 调用 PowerShell 脚本 → codex exec → 结果写入文件

只要这个链路跑通,每天定时生成日报、代码评审、巡检报告都可以交给 Codex 替你干。


第一步:把 Codex CLI 加进系统 PATH

这是最常见也最容易出问题的环节。Windows 的「任务计划程序」执行命令时不会加载你日常终端的环境变量,所以必须先让 codex 成为全局可执行命令。

检查当前是否可用:

codex --version

如果显示版本号,说明没问题。如果提示找不到命令,执行:

# 查看 Codex 安装位置
npm list -g @openai/codex

# 把 npm 全局目录加入 PATH(临时生效)
$env:PATH += ";$(npm config get prefix)\global"

# 永久生效:写入系统环境变量
[Environment]::SetEnvironmentVariable(
    "PATH",
    $env:PATH + ";$(npm config get prefix)\global",
    "Machine"
)

⚠️ 重要:写入系统变量后,重新打开一个 PowerShell 窗口再执行后续步骤,否则新窗口里还是找不到 codex。


第二步:写一个 PowerShell 调度脚本

在某个固定位置创建脚本文件,比如 C:\Scripts\codex_daily_report.ps1:

# codex_daily_report.ps1
$repo    = "C:\Projects\my-app"
$logFile = "C:\Logs\codex-daily.log"
$date    = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

# 确保日志目录存在
$logDir = Split-Path $logFile
if (-not (Test-Path $logDir)) { New-Item -ItemType Directory -Path $logDir -Force | Out-Null }

# 切换到项目目录
Set-Location $repo

# 获取最近 24 小时 git 提交记录
$since   = (Get-Date).AddDays(-1).ToString("yyyy-MM-ddTHH:mm:ss")
$commits = git log --since $since --pretty=format:"%h | %an | %s" --no-merges

if (-not $commits) {
    Add-Content -Path $logFile -Value "[$date] 过去24小时无提交,跳过。"
    exit 0
}

# 构建 Codex prompt(结构化,质量更高)
$prompt = @"
你是一个专业的代码审查助手。请根据以下 Git 提交记录,生成一份简洁的日报摘要。

要求:
1. 按模块或功能方向分组,不要罗列所有提交
2. 标记可能存在风险的变更(涉及数据库、接口协议、关键业务逻辑)
3. 只基于给定信息,不要推测不存在的内容
4. 使用 Markdown 格式输出

提交记录如下:
$commits
"@

# 调用 Codex CLI(非交互模式)
$env:PATH = "$env:PATH;$(npm config get prefix)\global"
$result   = codex exec --prompt $prompt 2>&1

# 写入日志和日报
Add-Content -Path $logFile -Value "[$date] 执行完成,退出码: $LASTEXITCODE"
if ($LASTEXITCODE -eq 0) {
    $result | Out-File -FilePath "$repo\daily-summary.md" -Encoding UTF8
    Add-Content -Path $logFile -Value "[$date] 日报已生成: daily-summary.md"
} else {
    Add-Content -Path $logFile -Value "[$date] Codex 执行失败:`n$result"
}

💡 关键点:脚本里要显式设置 PATH,不能依赖系统环境。codex exec 是非交互模式的核心命令,执行完就退出,适合被定时任务调用。


第三步:在「任务计划程序」里注册定时任务

方式一:图形界面操作(推荐新手)

  1. 按 Win + R,输入 taskschd.msc,回车打开任务计划程序
  2. 右侧点击「创建基本任务」
  3. 名称:Codex 每日日报,描述随便写
  4. 触发器:选「每天」,设置执行时间(比如 08:30)
  5. 操作:选「启动程序」 - 程序:powershell.exe - 参数:-ExecutionPolicy Bypass -File "C:\Scripts\codex_daily_report.ps1" - 起始位置:C:\Scripts
  6. 完成后双击该任务,点「运行」测试一次

方式二:PowerShell 一键注册

把下面这段粘贴到 PowerShell(管理员)里执行:

$action = New-ScheduledTaskAction `
    -Execute "powershell.exe" `
    -Argument '-ExecutionPolicy Bypass -File "C:\Scripts\codex_daily_report.ps1"' `
    -WorkingDirectory "C:\Scripts"

$trigger = New-ScheduledTaskTrigger `
    -Daily -At 8h30m

$principal = New-ScheduledTaskPrincipal `
    -UserId $env:USERNAME `
    -LogonType Interactive `
    -RunLevel Highest

Register-ScheduledTask `
    -TaskName "CodexDailyReport" `
    -Action $action `
    -Trigger $trigger `
    -Principal $principal `
    -Description "每日调用 Codex 生成 Git 提交日报"

执行后在「任务计划程序」库列表里就能看到 CodexDailyReport。


第四步:验证与常见问题排查

手动测试

在任务计划程序里右键刚创建的任务,选「运行」,然后检查:

# 查看日志
Get-Content "C:\Logs\codex-daily.log" -Tail 20

# 查看日报是否生成
Get-Content "C:\Projects\my-app\daily-summary.md"

常见问题

现象 原因 解决
任务运行但无输出 PATH 没包含 codex 在脚本里显式加 $env:PATH += "..."
报错「找不到模块」 Node.js 不在任务计划程序的环境里 用 where.exe node 找全路径,写入脚本
执行失败退出码非 0 Codex API Key 未配置或模型不可用 先在终端手动运行 codex exec "hello" 验证
定时不触发 任务状态不是"已启用" 双击任务 → 属性 → 勾选"当任何用户登录时运行"

开启「不管谁登录都运行」

默认任务只在当前用户登录时执行,如果你希望关机后自动补跑,需要修改任务属性:

  1. 双击任务 → 「触发器」→ 「编辑」→ 勾选「延迟任务持续时间」
  2. 「条件」选项卡 → 勾选「只有在计算机使用交流电源时才启动此任务」(笔记本注意)
  3. 「常规」选项卡 → 改为「无论用户是否登录都要运行」→ 勾选「使用最高权限运行」

进阶:多项目并行调度

如果你有多个仓库需要分别生成日报,可以把脚本改成接收参数:

# codex_daily_report.ps1
param([string]$Repo = $(Read-Host "请输入仓库路径"))

# ... 后续逻辑不变,把 $repo 换成 $Repo ...

然后注册多个任务,每个任务指向不同的仓库路径和参数:

# 为第二个仓库注册
$action2 = New-ScheduledTaskAction `
    -Execute "powershell.exe" `
    -Argument "-ExecutionPolicy Bypass -File `\"C:\Scripts\codex_daily_report.ps1`\" -Repo `\"C:\Projects\other-app`\"" `
    -WorkingDirectory "C:\Scripts"

# 每小时执行一次
$trigger2 = New-ScheduledTaskTrigger -Once -At (Get-Date).AddHours(1)
$trigger2.Repetition.Interval = "PT1H"  # 每1小时

Register-ScheduledTask -TaskName "CodexOtherApp" -Action $action2 -Trigger $trigger2

最后的话

把 Codex CLI 接入 Windows 任务计划程序,本质上是把被动响应变成主动值守。每天早晨打开电脑,日报已经在桌上等你了——这才是 AI 编程助手该有的样子。

来源:开源社区《Codex定时任务实战:用CLI实现无人值守的代码评审与日报自动生成》(kwkr.cn,2026-10)

资料最后核对日期:2026-10-03 · 内容整理自 CodexGuide 社区公开教程