日常小脚本-使用vbscript编写主机存活探测脚本
今天在单位工作中遇到一个问题,摄像头长时间不在线会导致被上级通报。
简单测试了一下,摄像头IP,在线时可以正常ping通。
于是打算写一个脚本定时检查摄像头是否在线(ICMP报文是否可达)。
脚本如下
文件说明
ip-all.txt : 存放需要检测的IP地址or域名,方便用来修改需要探测的IP地址,所以不写死进代码。
result.txt : 运行结果
log.txt:记录日志信息
第一版(使用bat批处理)
@echo off
del /q result.txt
chcp 65001>nul
for /f %%i in (ip-all.txt) do ping %%i -w 60 -n 2|| echo 监控%%i不在线 >>result.txt
可以正常实现功能,但是不能优雅的弹窗,而且运行时的大黑框框看着也挺闹心的!
第二版(使用vbscript对批处理进行隐藏运行)
Set ws = CreateObject("Wscript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
ws.run "cmd /c monitor.bat",vbhide,true
Set f=fso.OpenTextFile("result.txt",1,false)
MsgBox f.ReadAll,48+1,"监控预警"
实现了隐藏运行,但是需要至少3个文件才能运行,而且还存在中文编码问题(批处理echo写入的内容用VBS读进来乱码)。
最终版(隐藏运行,优雅弹窗,增加日志)
Set ws = CreateObject("Wscript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
ws.run "cmd /c del /q result.txt&for /f %i in (ip-all.txt) do ping %i -w 60 -n 2|find ""TTL=""|| echo 监控%i不在线>>result.txt&&echo %date:~0,10% %time:~0,8% 监控%i 不在线 >>log.txt",vbhide,true
'--------------------------注释段--------------------------
'del /q result.txt 清除上次结果
' 管道符 &,|| &连接命令,||前一条命令执行成功则不执行后续命令
' ping -w 60 -n 2 设置超时时间60,次数2。
' vbhide,true 隐藏运行,等待调用程序退出再向后执行。
'--------------------------注释段--------------------------
Set f=fso.OpenTextFile("result.txt",1,true)
if fso.GetFile("result.txt").size > 0 Then
MsgBox f.ReadAll,48+1,"监控预警"
else
ws.run "cmd /c echo %date:~0,10% %time:~0,8% 监控全部在线 >>log.txt",vbhide,true
end if
既然使用了vbscript进行编写,那么bat批处理也不需要了。
运行结果(IP如果全部在线则没有任何输出)
后续配合定时任务功能,每10分钟检查一次,应该可以做到工作时间随时提醒了。