日期:2014-05-17  浏览次数:20827 次

请教下关机VBS脚本或者批处理
请教下关机VBS脚本或者批处理
 
要求: 当网络断开时候自动执行关机脚本 ,倒计时20分钟
  当网络连接时候自动取消关机


------解决方案--------------------
简单点就是ping一个网址,根据成功与否来判断执行相应的操作,不足就是那个网址挂了就不准了,不过ping www.hao123.com我想的话挂掉的可能性不大,呵呵

------解决方案--------------------
while(1){
sleep 60
if(test-connection -count 1 192.168.8.97 -ErrorAction SilentlyContinue){$errtime=$null}
elseif($errtime -eq $null){$errtime=get-date}
if(((get-date)-$errtime).Minutes -gt 20){(gwmi win32_operatingsystem).Win32Shutdown(12)}
}

powershell脚本,每分钟测试一下连通性,如果是通的$errtime就是空值,如果不通且$errtime就设置开始计时.当前时间和计时时间相差20分钟后,Forced Power Off。
------解决方案--------------------
要多几个条件来测试才好,避免误报。ip地址可以是个列表。
也可以用脚本进行邮件通知,最好是能短信通知多方,以确认不是误报,毕竟机器关掉后,可能影响业务。
最好是通知机房关机。
------解决方案--------------------
探讨

简单点就是ping一个网址,根据成功与否来判断执行相应的操作,不足就是那个网址挂了就不准了,不过ping www.hao123.com我想的话挂掉的可能性不大,呵呵

------解决方案--------------------
BatchFile code
@echo off
:a
ping baidu.com -n 1 -l 0 -w 3000 >nul&&goto a
start shutdown -s -t 1200
:b
ping baidu.com -n 1 -l 0 -w 3000 >nul&&(shutdown -a&&goto a)||goto b

------解决方案--------------------
要注意2003系统shutdown只支持600秒延时
------解决方案--------------------
给楼主写了个VBS,实现起来比较完美,在后台执行,每30秒PING一次网关IP,如果不通,追加20分钟计时,如果在这20分钟内网关PING通,取消执行关机,如果20分钟到了还PING不通就立即执行关机。

这个VBS相对批处理耗用资源少,后台静默运行,及时也较准。

代码已经给你在2003下面测试通过

VBScript code

'赋值IP或者域名给strHost
strHost = "192.168.0.1"

'关机时间状态,用来避免循环中改写关机计时时间和取消关机
sdOld = True

'循环开始,如要结束运行只能终止进程
Do

'循环开始首先获取当前时间
nowTime = FormatDateTime(Time, vbShortTime)

'如果PING不通而且未设置关机计时时间,将设置计时20分钟
if Ping(strHost) = False and sdOld = True Then
  sdOld = False
  nextTime = FormatDateTime(DateAdd("n" , 20, now), vbShortTime)
End if

'如果PING通取消关机
if Ping(strHost) = True Then
  sdOld = True
End if

'如果当前时间等于关机时间,而且计时未取消,立即执行关机
if nowTime = nextTime and sdOld = False Then
  CreateObject("WScript.Shell").Exec("shutdown -s -t 0 -d P:4:1")
End if

'等待30秒进行下次循环
Wscript.Sleep 30000
Loop

Function Ping(strHost)
  Set objPing = GetObject("winmgmts:").Get("Win32_PingStatus.Address='" & strHost & "'")
  If ISNull(objPing.StatusCode) or objPing.StatusCode<>0 Then
    Ping = False
  Else
    Ping = True
  End If
End Function

------解决方案--------------------
xue学习了学习了