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 文件即可。
用计划任务定时运行
- Win+R 输入 taskschd.msc 打开任务计划程序
- 创建基本任务,触发器选「每天」,时间设为清晨(如 6:00)
- 操作为「启动程序」,程序填 powershell,参数加
-ExecutionPolicy Bypass -File 脚本路径 - 注意勾选「使用最高权限运行」,避免脚本因权限不足失败
常见问题
1. 提示 401 未授权
密钥与外部控制器设置里的值不一致,核对后重试。
2. 节点历史为空测不到延迟
先在客户端界面手动测一次速,让节点产生历史数据,脚本才能排序。
总结
Windows 用户用 PowerShell 就能完成节点的自动切换,配合计划任务实现无人值守。 脚本思路可扩展:加告警、加日志、按时间段切不同节点组。