为了解决一些不可靠的 2G/3G 移动宽带连接问题,我想设置一个自动服务,在互联网连接中断一定小时数后强制重启网络接口本身或整个计算机。这将自动执行我们迄今为止手动恢复连接的操作。
Windows 8 中是否存在这样的实用程序?如果没有,我该如何编写这样的任务脚本?
简单介绍一下背景情况,我们在无法进入的地方安装了一组计算机,作为远程监控正在测试的系统的安装的一种方式。无论如何,这些都是运行日志/配置程序的普通老式 Windows 8 上网本,通常通过 2G/3G 加密狗连接。
不幸的是,无论出于什么原因,这些连接往往相当不稳定,几个月后就会断开,需要手动重启。ISP 几乎没有提供任何帮助,基本上声称他们的现代消费设备不是为这种类型的应用而设计的(这很公平),但也无法提出任何替代方案。
公平地说,市场上确实有工业调制解调器/路由器设备,但数量级的价格差异和系统已经安装的事实让我寻找简单的解决方案。
最后,我不是“超级用户”,这是我在这里提出的第一个问题或活动,因此,如果这个问题与主题无关或已经得到解答,我深表歉意。
答案1
您可以编写一个批处理脚本,ping 一些几乎从不关闭的网站(Google!),然后您可以用该脚本检测您的互联网是否正常工作。一旦完成检测部分,就可以很容易地从批处理文件重新启动 PC 或拨号连接。这是我的示例脚本:
@echo off
:begin
ping www.google.com | find "Reply" > nul
if errorlevel 1 goto :failed
goto :OK
:failed
echo Failed
choice /T 3600 /D Y /N
rasdial <dial-up connection name> <username> <password>
goto begin
:OK
echo OK
goto begin
答案2
为了记录,这是我在修改了 tumchaaditya 的解决方案后最终得到的脚本。
它尚未在野外被触发,但经过测试似乎有效。一旦它被触发,我将修改此帖子。
理论上,持续 ping 的带宽消耗总计约为 1.5 GB/年,因此定期测试可能更可取。但是我的 ISP 声称只计算实际有效载荷字节,我希望持续活动可以起到保持活动的作用。
@echo off
set INTERFACE="Local Area Connection"
set TIMEOUT=3600
set IP=8.8.8.8
set LOG="watchdog.log"
echo %DATE% %TIME%: Watchdog started >> %LOG%
:loop
rem First check the interface for an hour by pinging the Google DNS
rem and resetting the networking interface if it should fail.
ping -n %TIMEOUT% -w 1000 -l 0 %IP%
if %errorlevel% NEQ 1 goto :loop
echo %DATE% %TIME%: Connection failed. Restarting interface.. >> %LOG%
netsh interface set interface %INTERFACE% disable
netsh interface set interface %INTERFACE% enable
rem Give it another shot but restart the whole computer if it the communication should still fail
ping -n %TIMEOUT% -w 1000 -l 0 %IP%
if %errorlevel% NEQ 1 goto :loop
echo %DATE% %TIME%: Still no connection. Restarting computer.. >> %LOG%
shutdown /r /c "Internet wathchdog"
echo %DATE% %TIME%: Waiting for system to shut down >> %LOG%
choice /T %TIMEOUT% /D Y /N > NUL
echo %DATE% %TIME%: Gave up on the shut down attempt. Trying again.. >> %LOG%
goto :loop
请注意,重新启动网络接口需要管理权限(奇怪的是,重新启动机器不需要。)
还要注意退出状态平对于同一子网上任何无响应的系统显然仍然为 0。
我懒得去研究如何设置一个合适的守护进程,所以我必须承认通过在自动启动中创建指向它的链接、将帐户设置为自动登录、将链接标记为以管理员身份运行以及禁用 UAC 来运行该脚本。