如何检测网络中断, 并自动重启网卡

    本人比较穷,住的是平民窟。所以,要和别人共享网络。很多不厚道的人喜欢用arp 病毒攻击。害的我的网络不是很稳定,经常会断网。断网后,必须,重启网卡网络才能恢复。

    一来重启网卡麻烦,每次断网了都要手动重启一下,二来,晚上挂机下载电影,经常下个半个小时,网络就断了,害我白开一晚上电脑。

    对window操作系统,我的确是不是很精通,所以,我就换成linux, 这样,写个shell脚本自动检查网络,然后恢复网络。可是linux 也是令人伤心那,好点的下载软件都没有,那个快车,1.0版本的,下载像个鸵鸟一样,太慢了。迅雷,根本就没有。

    于是,我听说window 也有一个 shell 而且,还叫做powershell。vista 和 window 7 好像是自带这个shell的。xp估计要安装一下,去google一下就可以了。

    观察了一下,这个shell,是基于.NET的。功能特别的强大,有兴趣的可以去研究一下它的语言参考。哥学了1个小时,终于,基本的东西学会了,也就很容易写我的重置网卡的脚本了。

 

 

代码
#重置网络:当检查到网络问题以后
#
以管理员运行 powershell ,然后 Set-ExecutionPolicy unrestricted 
#

do
{
    
$getway  = Get-WmiObject -Class Win32_PingStatus -Filter "Address='192.168.1.1'" -ComputerName . | Where-Object {$_.StatusCode -eq 0};
    
if ($getway -eq $null)
    {
        sleep 
1;
        
#重试,防止ping本身发生错误。
        $getway  = Get-WmiObject -Class Win32_PingStatus -Filter "Address='192.168.1.1'" -ComputerName . | Where-Object {$_.StatusCode -eq 0};
    }
    
if ($getway -eq $null)
    {
        
$adaptor = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*82567LM*"};
        
$adaptor.Disable();
        sleep 
5;
        
$adaptor.Enable();
        echo 
"waiting net work ok ...";
        sleep 
10#等待网络修复好,一般10s修复不好,就要重置一下了。
        echo "reset adaptor";
    }
    sleep 
2;
    echo 
"net work is ok , sleep 2 second.";
while(1)
 

然后,以管理员身份打开powershell ,运行 Set-ExecutionPolicy unrestricted 命令

再运行上面的脚本,就可以了。你就可以放心的挂机。

 

posted @ 2010-08-22 18:16  暮夏  阅读(3579)  评论(5编辑  收藏  举报