菏泽九九信息网

Vbs实现监测断网就关机的实现代码

发布:2026-04-01 11:02 浏览:0
特别声明:本页信息由用户及第三方发布,真实性、合法性由发布人负责。详情请阅读九九信息网免责条款
详细信息

' 网络监测并自动关机脚本
' 使用方法:
' 1. 将代码保存为 .vbs 文件(如:NetworkMonitorShutdown.vbs)
' 2. 可以设置为开机启动或使用计划任务定时运行

Option Explicit

' ========== 配置部分 ==========
Const CHECK_INTERVAL = 10  ' 检查间隔(秒)
Const MAX_RETRY_COUNT = 3  ' 最大重试次数
Const TARGET_HOST = "8.8.8.8"  ' 用于测试网络连通性的目标主机(可以是DNS服务器或网关)
Const PING_TIMEOUT = 3000  ' ping超时时间(毫秒)
Const SHUTDOWN_DELAY = 30  ' 关机倒计时(秒)
' ==============================

Dim objShell, objFSO, objWMIService, objPing
Dim strLogFile, bNetworkAvailable, iRetryCount
Dim strComputer, strCommand

' 初始化
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

' 日志文件路径(与脚本同目录)
strLogFile = Replace(WScript.ScriptFullName, ".vbs", ".log")

' 主循环
Do
    bNetworkAvailable = CheckNetworkConnection()

    If bNetworkAvailable Then
        ' 网络正常,重置重试计数
        iRetryCount = 0
        LogMessage "网络连接正常"
    Else
        ' 网络异常,增加重试计数
        iRetryCount = iRetryCount + 1
        LogMessage "网络连接失败,重试次数: " & iRetryCount & "/" & MAX_RETRY_COUNT

        ' 达到最大重试次数后执行关机
        If iRetryCount >= MAX_RETRY_COUNT Then
            LogMessage "网络连接持续中断,准备关机..."
            ExecuteShutdown()
            Exit Do
        End If
    End If

    ' 等待指定间隔后再次检查
    WScript.Sleep CHECK_INTERVAL * 1000
Loop

' ========== 函数定义 ==========

' 检查网络连接函数
Function CheckNetworkConnection()
    On Error Resume Next

    Dim objExec, strPingResult, bResult

    bResult = False

    ' 方法1: 使用ping命令检查
    Set objExec = objShell.Exec("ping -n 1 -w " & PING_TIMEOUT & " " & TARGET_HOST)

    Do While objExec.Status = 0
        WScript.Sleep 100
    Loop

    strPingResult = objExec.StdOut.ReadAll

    If InStr(strPingResult, "TTL=") > 0 Or InStr(strPingResult, "Reply from") > 0 Then
        bResult = True
    Else
        ' 方法2: 备用检查方法 - 使用WMI
        Dim colPings, objStatus
        Set colPings = objWMIService.ExecQuery("SELECT * FROM Win32_PingStatus WHERE Address = '" & TARGET_HOST & "'")

        For Each objStatus In colPings
            If Not IsNull(objStatus.StatusCode) Then
                If objStatus.StatusCode = 0 Then
                    bResult = True
                    Exit For
                End If
            End If
        Next
    End If

    CheckNetworkConnection = bResult
    On Error GoTo 0
End Function

' 执行关机函数
Sub ExecuteShutdown()
    Dim strMessage, strChoice

    ' 显示警告消息(可选)
    strMessage = "网络连接已丢失超过" & (MAX_RETRY_COUNT * CHECK_INTERVAL) & "秒。" & vbCrLf & _
                 "计算机将在 " & SHUTDOWN_DELAY & " 秒后关闭。" & vbCrLf & _
                 "要取消关机,请按取消按钮并在" & SHUTDOWN_DELAY & "秒内运行:shutdown /a"

    strChoice = MsgBox(strMessage, vbOKCancel + vbExclamation, "网络监测 - 自动关机")

    If strChoice = vbCancel Then
        LogMessage "用户取消了关机操作"
        Exit Sub
    End If

    ' 记录关机事件
    LogMessage "正在执行关机命令..."

    ' 执行关机命令
    ' 使用 /f 强制关闭正在运行的应用程序
    ' 使用 /t 设置延迟时间
    ' 使用 /c 添加注释
    strCommand = "shutdown /s /f /t " & SHUTDOWN_DELAY & " /c ""网络连接丢失,系统自动关机"""
    objShell.Run strCommand, 0, False

    ' 等待关机命令执行
    WScript.Sleep 5000

    ' 检查是否成功执行关机
    Dim objExec2
    Set objExec2 = objShell.Exec("shutdown /a")
    Do While objExec2.Status = 0
        WScript.Sleep 100
    Loop

    LogMessage "关机命令已发送,系统将在 " & SHUTDOWN_DELAY & " 秒后关闭"
End Sub

' 日志记录函数
Sub LogMessage(strMessage)
    Dim objLogFile, strTimestamp

    strTimestamp = "[" & Now & "] "

    ' 写入日志文件
    Set objLogFile = objFSO.OpenTextFile(strLogFile, 8, True)  ' 8 = 追加模式
    objLogFile.WriteLine strTimestamp & strMessage
    objLogFile.Close

    ' 在控制台显示(如果以命令行方式运行)
    WScript.Echo strTimestamp & strMessage
End Sub

' 清理资源
Set objShell = Nothing
Set objFSO = Nothing
Set objWMIService = Nothing

使用说明:

保存脚本

配置参数(脚本开头的常量部分):

运行方式

停止脚本

取消关机

注意事项:

权限要求:需要管理员权限才能执行关机操作 目标主机选择:建议使用可靠的服务器地址(如 8.8.8.8 是Google的DNS服务器) 日志文件:脚本会在相同目录下生成日志文件,记录网络状态和操作历史 测试建议:首次使用时,建议先将 MAX_RETRY_COUNT 设小一些进行测试

这个脚本会在检测到网络连续断开超过设定时间后,自动执行关机操作,并提供取消机会和详细日志记录。

相关推荐