navicat 15 不支持成功回调钩子,必须用 powershell 脚本监听日志关键词(如“[ok] export finished”)或检查文件生成,并调用企业微信 webhook api 发送通知;需注意日志编码、webhook 格式及 success 定义标准。

Navicat 15 自动化任务本身不支持成功回调钩子
Navicat 的「自动运行」功能(包括批处理作业)只提供执行结果日志和邮件通知,没有内置的「任务成功后调用 Webhook」机制。所谓“成功后触发”,必须靠外部手段捕获执行状态并主动发起企业微信 API 调用。
关键点在于:不是 Navicat 主动推送,而是你用脚本监听它的输出,再决定是否调用 https://qyapi.weixin.qq.com/cgi-bin/webhook/send。
- Navicat 批处理作业执行完,只会生成日志文件或返回退出码(0 表示无报错,但不等于业务成功)
-
navicat.exe /run "MyBackupTask"这类命令本身不阻塞、不返回结构化结果,需加-Wait参数才能同步等待 - 日志里“Success”字样不可靠——比如导出 SQL 成功但 Excel 写入磁盘失败,Navicat 仍可能记为 success
推荐做法:用 PowerShell 封装执行 + 日志关键词判断
在 Windows 上,用 PowerShell 控制 Navicat 启动、等待、读取尾部日志,并根据预设关键词判定是否调用企微机器人。
注意:不能只看“Error”或“failed”,因为有些失败不打 error 字样(如权限不足写入导出目录时静默失败),建议你把关键成功标识写进日志里——比如在批处理最后加一条 SELECT 'TASK_COMPLETED_AT_' || datetime('now'); 到日志表,或让 Navicat 导出任务末尾手动写一行 [OK] Export finished 到日志文件。
- 使用
Start-Process -FilePath "C:\Program Files\PremiumSoft\Navicat Premium 15\navicat.exe" -ArgumentList '/run "MyTask"', '/log "C:\navi_logs\mytask.log"' -Wait - 执行后立即用
Get-Content "C:\navi_logs\mytask.log" -Tail 10读最后几行 - 匹配
if ($log -match '\[OK\] Export finished') { …send wecom… } - 企业微信机器人 token 和 webhook 地址要硬编码或从配置文件读取,避免明文暴露在脚本中
企业微信机器人发送失败的常见卡点
即使脚本逻辑跑通,90% 的失败发生在 API 层。别假设“发出去就收到了”。
- webhook URL 必须是完整地址,含
https://,结尾不能有多余空格或换行 - 请求 body 必须是 JSON,且
Content-Type: application/json,PowerShell 里要用ConvertTo-Json并指定-Depth 3 - 企微机器人默认仅支持文本、markdown、图文三种类型;发
text类型时,content字段值不能含未转义的双引号或换行符 - 如果用自建应用(非群机器人),得走
/cgi-bin/message/send+ access_token,而 access_token 有 2 小时有效期,必须每次先调/cgi-bin/gettoken换新 token - 测试时优先用个人微信扫码加入测试群,再往该群添加机器人——不要直接往部门群或客户群加,权限策略可能拦截
别忽略日志路径和编码问题
Navicat 写日志默认用系统 ANSI 编码(中文 Windows 是 GBK),而 PowerShell 默认用 UTF-8 读文件,会导致 -match 失效。
- 要么强制 Navicat 日志用 UTF-8:在「工具 → 选项 → 环境 → 日志」里勾选「使用 UTF-8 编码保存日志」(Navicat 15.0.30+ 支持)
- 要么 PowerShell 读日志时显式指定编码:
Get-Content -Path "C:\navi_logs\mytask.log" -Encoding Default -Tail 10(Default对应系统默认编码) - 日志路径避免含中文、空格、特殊符号;最好用全英文绝对路径,例如
C:\navicat_logs\ - 如果日志文件被其他进程占用(比如 Navicat 正在写),
Get-Content可能报错,加-ErrorAction SilentlyContinue并重试 1–2 次更稳妥











