自动化

PowerShell 调用 Clash API:Windows 定时切换节点脚本

2024年11月20日 约8分钟 PowerShell

Clash 系内核都暴露外部控制器接口,Windows 上可以直接用 PowerShell 调用, 不需要额外装 Python。这篇文章给出一个可用的脚本:定时测速、自动切到最快节点, 以及如何用计划任务让它每天自动跑。

开启外部控制器

在 Clash Verge 设置里开启「外部控制器」,默认端口 9090。建议同时设置密钥(Bearer Token), 并确认仅回环地址可访问,避免局域网内其它设备也能调用。

PowerShell 脚本:自动切换最快节点

脚本逻辑分三步:读取策略组下的节点列表、逐个测延迟、切换到最低延迟节点。 下面是核心片段(在 PowerShell 中运行):

$headers = @{ Authorization = 'Bearer 你的密钥' }
$proxy = Invoke-RestMethod -Uri 'http://127.0.0.1:9090/proxies/你的组名' -Headers $headers
$best = $proxy.all | Where-Object { $_.history.Count -gt 0 } |
  Sort-Object { ($_.history | Select-Object -Last 1).delay } | Select-Object -First 1
Invoke-RestMethod -Method Put -Uri "http://127.0.0.1:9090/proxies/你的组名" -Headers $headers `
  -ContentType 'application/json' -Body (@{ name = $best.name } | ConvertTo-Json)

将「你的密钥」「你的组名」替换为实际值后保存为 .ps1 文件即可。

用计划任务定时运行

常见问题

1. 提示 401 未授权

密钥与外部控制器设置里的值不一致,核对后重试。

2. 节点历史为空测不到延迟

先在客户端界面手动测一次速,让节点产生历史数据,脚本才能排序。

总结

Windows 用户用 PowerShell 就能完成节点的自动切换,配合计划任务实现无人值守。 脚本思路可扩展:加告警、加日志、按时间段切不同节点组。

相关阅读