标题: [系统相关] 求助批处理检测网络关机2008R2系统 [打印本页]
作者: qq3475534 时间: 2014-2-22 14:16 标题: 求助批处理检测网络关机2008R2系统
本帖最后由 qq3475534 于 2014-2-22 14:25 编辑
在网上找了一些发现都只支持2003系统的,不支持2008R2系统
2008 R2 系统利用ping 网络不通返回的数据和2003 XP系统返回的不一样,比如网络不通返回的数据和网线被拔出返回的数据都不同
要求检测三个内网IP 三个都通的话 或者只要有一个通,都继续检测下去, ,(如果在60秒内三个中的IP只要有1个通了,就放弃关机就自动检测下去) 三个都不通的话,
就预执行自己设置的一段批处理内容后
在过300秒后就自动安全关机,并在当前目录下写入LOG 记录是什么时间关机的..
如此一直循环下去。。
作者: 522235677 时间: 2014-2-22 21:42
- @echo off
- :loop
- ping 192.168.1.1 -n 1 >nul
- if errorlevel 1 (
- ping 192.168.1.2 -n 1 >nul
- if errorlevel 1 (
- ping 192.168.1.3 -n 1 >nul
- if errorlevel 1 (
- goto error
- )
- )
- )
- ping 127.1 -n 2 >nul
- goto loop
- :error
- ::::::::::
- echo %date% %time% >>history.log
- shutdown -s -t 300
复制代码
作者: PowerShell 时间: 2014-2-23 10:15
2008 R2 系统利用ping 网络不通返回的数据和2003 XP系统返回的不一样-----各位看官,这是所有面向字符程序的悲哀,是所有面向对象程序的优势。
简单来说,面向对象程序,返回结果,当然是属性。简单理解,属性是不带格式的字符串。
楼主的需求,从面向对象,解题思路来讲,就是ping三个网址,返回3个true,false。
然后用if,来处理不同分支,解题。
作者: qq3475534 时间: 2014-2-23 11:24
本帖最后由 qq3475534 于 2014-2-23 11:27 编辑
回复 2# 522235677
这个我刚刚测试了确实可以,但是有个问题,就是比如我在关机之前任意一个IP网络ping通了,那可否取消关机在继续检测呢?
作者: qq3475534 时间: 2014-2-23 11:26
本帖最后由 qq3475534 于 2014-2-23 11:28 编辑
回复 3# PowerShell
版主楼上的代码 我刚刚测试了确实可以,但是有个问题,就是比如我在关机之前任意一个IP网络ping通了,那可否取消关机在继续检测呢?
作者: 522235677 时间: 2014-2-23 22:13
- @echo off
- echo wscript.sleep wscript.arguments(0) >w.vbs
- :loop
- ping 192.168.1.1 -n 1 >nul
- if errorlevel 1 (
- ping 192.168.1.2 -n 1 >nul
- if errorlevel 1 (
- ping 192.168.1.3 -n 1 >nul
- if errorlevel 1 (
- if "%1"=="a" (exit /b) else (goto error)
- )
- )
- )
- start /w w.vbs 1000
- goto loop
- :error
- ::::::::::
- start /w w.vbs 300000
- echo %date% %time% >>history.log
- call :loop a
- shutdown -s -t 0
复制代码
作者: qq3475534 时间: 2014-2-24 18:34
回复 6# 522235677
这段批处理测试不行.....
作者: 522235677 时间: 2014-2-24 19:07
回复 7# qq3475534
我测试都可以,你出现什么错误了?
作者: PowerShell 时间: 2014-2-24 19:20
本帖最后由 PowerShell 于 2014-2-24 19:23 编辑
我观楼主的需求,是有些逻辑混乱的,当然,也可能是我逻辑混乱。
---以下为我的理解---
我用powershell写脚本,用任务计划每分钟运行。
逻辑代码为:
if (ip1 =通了 ip2 =通了 ip3=通了)
{
#3个ip都通了
注册表某项=0
}
else
{
注册表某项++
}
if ( 注册表某项 > 5)
{
#3个ip,连续5分钟没通了
立即写日志
立即关机
}
如果第六分钟通了,楼主还想取消关机,脚本代码就没法写了,
或者说一会设置关机,一会取消,没必要瞎jb折腾了。
还不如写成 【if ( 注册表某项 > 6){立即写日志 立即关机}】
即6分钟不通立即关机。
总之,我的观点是,脚本没必要等300秒延时,没必要有取消关机。
欢迎不同看法,欢迎就楼主问题抛论据。 你有论点,更有论据,骂我也不生气。
作者: Batcher 时间: 2014-2-24 20:43
回复 7# qq3475534
你需要具体描述一下怎么个不行
作者: qq3475534 时间: 2014-2-25 19:39
回复 9# PowerShell
不是这样的你理解错啦,我的意思是检测三个IP五分钟内都不通就会自动关机,那么在5分钟内三个IP任意中的一个IP只要通了就放弃关机在继续检测
也可以这样理解,在四分钟内三个IP任意一个通了就放弃关机继续检测!
作者: qq3475534 时间: 2014-2-25 19:40
回复 8# 522235677
我在自己笔记本WIN7 64上测试,运行脚本,一直都没关机,而且我本身网段是0段的,你的脚本是1段的我直接复制拿来用的,没修改任何地方。。
作者: 522235677 时间: 2014-2-25 19:51
回复 12# qq3475534
你得学会判断问题啊,加pause,取消 >nul,自己找问题
作者: PowerShell 时间: 2014-2-26 08:58
i服了楼主,88
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |