Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Скрипт перезагрузки роутера при разрыве коннекта

Ответить
Настройки темы
VBS/WSH/JS - Скрипт перезагрузки роутера при разрыве коннекта

Аватара для Николай_Шантуров@vk

Новый участник


Сообщения: 2
Благодарности: 0


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Доброго времени всем!
Есть готовый скрипт для адсл роутера, работает с утилитой "plink" запускается/отключается, всё без ошибок (без видимых)
Проблема в том, что при имитации разрыва соединения (вынимаю адсл из порта модема) перезагрузка не начинается вообще,
с консоли команда проходит, cd /d c:\route plink -noagent -l ЛОГИН -pw ПАРОЛЬ 192.168.1.1 reboot
но не завершается, пока не введу ещё рас reboot



Код: Выделить весь код
Option Explicit

Dim CheckPeriodSuccess, CheckPeriodFailure, CheckTimes, CheckTimesPeriod, oShell, LocalIP, UserName, Password, Client, Times

' =====================================================================


' Данные аутентификации
LocalIP = "192.168.1.1"
UserName = "ЛОГИН"
Password = "ПАРОЛЬ"

' Периодичность проверки пинга в мсек. (если подключение есть)
CheckPeriodSuccess = 20000

' Задержка перед повторной проверкой, если роутер был перезагружен
CheckPeriodFailure = 120000

' Кол-во контрольных проверок пинга (пакетов подряд)
CheckTimes = 3
' с интервалом (мсек.)
CheckTimesPeriod = 1000

' Путь к программе-клиенту (например plink.exe)
Client = "C:\route\plink.exe"

' =====================================================================

Set oShell = WScript.CreateObject("WScript.Shell")

Do
    if CheckRouter() then
        ' если все ОК
        WScript.Sleep CheckPeriodSuccess
    else
        ' если произведена перезагрузка
        WScript.Sleep CheckPeriodFailure       
    end if
Loop


Function CheckRouter()
  Dim Connected, ProcessID

  Connected = false

  Times = CheckTimes
  Do
    If IsOnline("www.ya.ru") then
        Connected = true
    elseif IsOnline("8.8.8.8") Then
        Connected = true
    end if
    if not Connected then
        if Times > 0 then
            Times = Times - 1
            WScript.Sleep CheckTimesPeriod
        end if
    end if
  Loop while Times and (not Connected)

  if Connected then
    CheckRouter = true
    'msgbox "Подключения нет."
  else
    'msgbox "Запускаю клиент"
    ProcessID = CreateProcess(Client & " " & LocalIP, 1)

    if 0 <> ProcessID then
        'msgbox "Передаю сочетания"
        WScript.Sleep 2000
        oShell.AppActivate ProcessID
        WScript.Sleep 500
        oShell.SendKeys UserName & chr(13)
        WScript.Sleep 500
        oShell.SendKeys Password & chr(13)
        WScript.Sleep 500
        oShell.SendKeys "reboot" & chr(13)
        WScript.Sleep 500
        oShell.SendKeys "^]"
        WScript.Sleep 100
        oShell.SendKeys "quit" & chr(13)
        WScript.Sleep 100
        call TerminateByPID (ProcessID)
    end if
  End If
End Function

Sub TerminateByPID(PID)
    Dim oWMISvc, oProcess, colProcesses
    Set oWMISvc = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    set colProcesses = oWMISvc.ExecQuery("Select * from Win32_Process WHERE ProcessId=" & PID)
    if colProcesses.Count > 0 then
        For each oProcess in colProcesses
            call oProcess.Terminate
        Next
    end if
End Sub

Function IsOnline (Address)
    On Error Resume Next
    Dim objPing, objStatus
    Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
        ExecQuery("select Replysize from Win32_PingStatus where address = '" & Address & "'")

    For Each objStatus in objPing
        IsOnline = not IsNull(objStatus.ReplySize) or IsOnline
    Next
End Function

Function CreateProcess(cmd, WindowStyle) 'вернет ProcessID
    Dim objWMIService, objStartup, objConfig, objProcess, PID
    Const SW_HIDDEN = 0
    Const SW_NORMAL = 1
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set objStartup = objWMIService.Get("Win32_ProcessStartup")
    Set objConfig = objStartup.SpawnInstance_
    objConfig.ShowWindow = WindowStyle
    Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
    call objProcess.Create (cmd, null, objConfig, PID)
    if not IsNull (PID) then CreateProcess = PID else CreateProcess = 0
End Function

Отправлено: 03:41, 29-11-2015

 

Аватара для Николай_Шантуров@vk

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


можно не отвечать.

-------
От вашего кода волосы дыбом встали, аж сидеть неудобно....


Отправлено: 00:49, 30-11-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Скрипт перезагрузки роутера при разрыве коннекта

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интернет - Нет чекбокса: Перезвонить при разрыве связи. haos9cr Microsoft Windows 8 и 8.1 4 16-12-2016 22:55
Интернет - восстановление связи при разрыве соединения Костян-Ростов Microsoft Windows 7 14 27-07-2016 12:56
VBS/WSH/JS - VBS скрипт автоматической перезагрузки роутера SystemsX Скриптовые языки администрирования Windows 1 07-11-2014 08:55
Интернет - PPPoE подключение при разрыве Мачо Microsoft Windows 8 и 8.1 1 28-05-2014 15:50
Разное - [решено] Зависает компьютер при разрыве подключения по локальной сети Cubbie Microsoft Windows 2000/XP 6 28-05-2009 17:32




 
Переход