日常小脚本-使用vbscript编写主机存活探测脚本

71

今天在单位工作中遇到一个问题,摄像头长时间不在线会导致被上级通报。

简单测试了一下,摄像头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分钟检查一次,应该可以做到工作时间随时提醒了。