如何用windows脚本自动隔1分钟测试网络是否连通?

zhuochideng 2011-01-30 05:26:37
环境: Windows XP SP3,用ADSL上网。

需求:开机时,计算机并没有上网,想在开机时运行一个脚本(不显示运行状态),每分钟检测一次,是否连通了互联网。如果未联通,每分钟检测一次,如果联通,则发一个短信到指定手机,再停止脚本的运行。

思路:因为Windows脚本运行时没有提示及响应,并且可用组策略设置,所以想用Windows脚本运行每分钟一次的测试。测试内容为ping www.google.com,域名能解析或有reply回应,则说明网络已连接,使用飞信的免费API发短信到自己手机上。

已有资源:
1、每分钟运行一次的脚本:
set os = createobject("wscript.shell")
do
os.run "d:\test.vbs"
wscript.sleep 1000*60
loop

2、飞信API地址:http://sms.api.bz/ (好象不能用了)

3、缺少基于脚本(不是批处理)的ping检测。

那位兄弟能指点一下呢?我找了好多资源,但不太理想,总弄不成功。
...全文
878 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Forever_Young 2011-01-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhuochideng 的回复:]
引用 3 楼 forever_young 的回复:

那啥,飞信我没用过,不知道啥DD,给你写了个VBS的,你自己看着套用

dim obj……


你的这个脚本有问题,无论网通不通,都显示通。
我又改了一下。
[/Quote]

可能测试环境不同,我是在win7下写的,win7下状态码总是有数字的,不存在null的情况,忽略了这一点
zhuochideng 2011-01-31
  • 打赏
  • 举报
回复
因为要在别人的机器上运行,而操作者对计算机几乎完全不懂,所以越简单越好。本想加入到组策略中也用脚本的,但实在不会写,又懒的研究了。
下面是最终结果。用了“推立方”的短信API。
用批处理拷贝到脚本目录中,然后手工添加到组策略的开机脚本中。
每分钟检测一次网络通断情况,如果连通,则发短信后,退出脚本。

--------------------------------------------
Option Explicit

dim objShell

do

If Ping("www.baidu.com")=True Then
set objShell=wscript.createObject("wscript.shell")
objShell.Run("http://www.tui3.com/api/send/?k=推立方的短信API KEY&r=xml&p=1&t=接收手机号&cn=推立方测试:网络已连接!")
rem Wscript.Echo "可以ping通"
exit do
Else
rem Wscript.Echo "无法ping通"
End If
wscript.sleep 1000*60

loop


Function Ping(strHost)

dim objPing, objStatus

Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
ExecQuery("select * from Win32_PingStatus where address = '"_
& strHost & "'")
For Each objStatus in objPing
If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then
Ping=false
else
Ping=true
End If

Next

End Function
------------------------------------------
zhuochideng 2011-01-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 forever_young 的回复:]

那啥,飞信我没用过,不知道啥DD,给你写了个VBS的,你自己看着套用

dim obj……
[/Quote]

你的这个脚本有问题,无论网通不通,都显示通。
我又改了一下。
Ghostbaby 2011-01-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ljc007 的回复:]
每分钟运行一次不需要任何脚本,任务计划就足以。
为什么不用批处理去ping呢?
[/Quote]

我也很费解啊
Forever_Young 2011-01-30
  • 打赏
  • 举报
回复
那啥,飞信我没用过,不知道啥DD,给你写了个VBS的,你自己看着套用


Option Explicit

If Ping("www.baidu.com")=True Then
Wscript.Echo "可以ping通"
Else
Wscript.Echo "无法ping通"
End If

Function Ping(sHost)
dim objPing,objRetStatus
Set objPing=GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
("select StatusCode from Win32_PingStatus where address='"&sHost&"'")
For Each objRetStatus in objPing
If objRetStatus.StatusCode<>0 Then
Ping=False
Else
Ping=True
End if
Next
End Function
dizhanwei 2011-01-30
  • 打赏
  • 举报
回复
以前看过类似的贴子,但忘了,好像也是批处理实现的
ljc007 2011-01-30
  • 打赏
  • 举报
回复
每分钟运行一次不需要任何脚本,任务计划就足以。
为什么不用批处理去ping呢?

6,871

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧