适用场景:Windows有UPS供电,但UPS没有USB通讯功能,无法自己停电后通知Win,就需要Win自己判断关机,
脚本逻辑规则:通过间隔ping路由器,若是ping不通则判断为停电,会在(shutdown /s /t 300)5分钟后执行关机。若是在5分钟内又成功ping通路由器则判定为市电恢复,自行取消关机命令。
新建PowerCheck.bat脚本
脚本原址 https://gist.github.com/chenshaoju/ebbf7542ffaa8afc776a90f50959cf35
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
@echo off REM 注意:此脚本需要在执行的计算机具备UPS为前提的条件下进行,且目标IP设备不能具有UPS。 REM 此批处理可以检测目标IP是否因为停电而失效,一旦失效则在180秒后关机。 REM 需将此批处理写入计划任务才能使用,建议每隔60秒执行一次。 REM 若不知道如何配置计划任务,请参阅 https://twitter.com/chenshaoju/status/973109556640333825 REM 若参照60秒执行一次的话,在120至180秒内若恢复供电(能Ping通),则会取消关机。 REM 若路由器或需要检测的目标IP不是 192.168.1.1 ,请手动修改下方的 192.168.1.1 IP地址。 REM 关机等待时间不建议设置太短,避免手动开机但目标IP未启动时又立刻自动关机。 REM 若只需要监控一个设备(默认),请勿注释下一行。 ping /n 3 /l 1 192.168.123.1|findstr "TTL=" && ( goto PowerOn ) || goto PowerOff REM 若需要监控两个(或多个,请自行参考格式添加)设备(可选),请取消注释下一行(删除开头的 "REM " ),并注释或删除上一行,此行是“和”(AND)的逻辑情况,只有两个IP都失效的情况下才会执行关机。 REM ping /n 3 /l 1 192.168.1.1|findstr "TTL=" && ( goto PowerOn ) || ping /n 3 /l 1 192.168.1.2|findstr "TTL=" && ( goto PowerOn ) || goto PowerOff :PowerOn shutdown /a exit 0 :PowerOff echo %date% %time%>"D:\Program Files\UPS Tools\bat_PowerCheck_test\log.txt" shutdown /s /t 300 REM exit 0 |
新建计划任务配置
- 【常规】选项卡,勾选“不管用户是否登录都要运行”、“使用最高权限运行”:
- 【触发器】选项卡新建触发器,重复任务间隔1分钟:
- 【操作选项卡】新建操作“启动程序”,脚本填入bat完整路径地址:
- 确定。
测试脚本是否工作
- 将脚本中的192.168.123.1这个路由器IP修改为一个不存在的IP,观测是否会在“shutdown /s /t 300”时间后成功关机。
完成。