powershell 是 windows 原生高效监控工具,通过动态获取默认网关、ping+tcp双探针检测、结构化csv日志记录及失败后自动重置网卡/弹窗/告警实现稳定可追溯的网络连通性监控。
powershell 是 windows 系统原生支持的高效监控工具,无需安装额外软件,就能实现对网关、服务器或关键服务的持续连通性检测。核心不在于“一直跑”,而在于“稳定采集+可追溯记录+可响应异常”。
自动获取网关并实时 Ping
硬编码网关地址容易失效,尤其在多网卡或 DHCP 环境下。应优先从系统路由表动态读取:
- 用 Get-NetIPConfiguration 或 Get-NetRoute -DestinationPrefix "0.0.0.0/0" 获取当前生效的默认网关 IP
- 搭配 Test-Connection -Count 1 -Quiet 判断是否可达,返回
True/False,适合脚本逻辑分支 - 每秒执行一次时,建议加 Start-Sleep 1 避免高频请求干扰网络设备
导出结构化日志到 CSV
单纯屏幕输出无法回溯分析。每次测试结果应写入 CSV,包含时间、状态、延迟等字段:
通过聊天(Telegram / 飞书)执行本地 `clawusage` 监控命令。当用户输入 `/clawusage ...`,或提出“查看 Codex 用量”、“开启/关闭自动…”等请求时触发使用。
- 使用 [PSCustomObject] 构建日志对象,字段如:时间、网关、延迟(ms)、状态(连通正常 / 丢包/超时)
- 用 Export-Csv -Append -Encoding UTF8 -NoTypeInformation 追加写入,避免覆盖历史
- 保存路径建议选
$env:ProgramData\NetworkMonitor\log.csv,普通用户也可写入且不易被误删
增强判断:不止 Ping,还要测端口
有些网关禁用 ICMP,仅靠 Ping 会误判为“断开”。加入 TCP 探针更可靠:
- 用 Test-NetConnection -ComputerName $gateway -Port 443 -TimeoutSec 2 -Quiet 测试 HTTPS 管理端口
- 若 Ping 失败但 TCP 成功,说明 ICMP 被屏蔽,网络实际通畅;两者均失败才真正异常
- 可合并两个结果生成综合状态字段,例如:
if ($pingOK -and $tcpOK) { "全通" } elseif ($pingOK) { "仅ICMP通" } else { "疑似中断" }
按需触发后续动作
监控不是目的,响应才是价值。可在检测失败时自动执行轻量干预:
- 记录失败次数,连续 3 次失败后运行 Restart-NetAdapter 尝试重置网卡
- 调用 cmd /c msg * 弹窗提醒当前用户(适用于办公终端)
- 用 Invoke-RestMethod 向内部告警接口发送 POST 请求,带主机名和时间戳










