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

Компьютерный форум OSzone.net » Клиентские ОС Microsoft » Microsoft Windows 2000/XP » Разное - Автоматизация ребута модема Intercross

Ответить
Настройки темы
Разное - Автоматизация ребута модема Intercross

Аватара для Ikari

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


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

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


Изменения
Автор: Ikari
Дата: 07-06-2010
Проблема в след.: переодически стопорит модем (т.е. о разрыве связи ничего не говорит, но пинг отсутствует).
Помогает ребут компа или модема (что в данном случае равносильно); либо просто рестор сохраненных настроек.
Подробнее: модем Intercross ICxDSL-5633E. Есть функция сохранение/восстановление настроек. В GUI модема можно войти через 192.168.1.1 по дефолту со стандартными логином/пассом admin

Итого: можно ли написать скрипт или утилиту для устранения таких рутинных действий?

-------
Нужный человек в нужном месте может изменить мир (hl2)


Отправлено: 23:06, 06-06-2010

 

Аватара для zonderz

Ветеран


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

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


Ikari,

http://forum.oszone.net/thread-171856.html
http://forum.oszone.net/thread-147012.html

-------
MCP, MCSA, MCSE, разработчик программы CMDTools
http://forum.oszone.net/thread-170783.html


Отправлено: 23:15, 06-06-2010 | #2



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

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

QRS QRS вне форума

Ветеран


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

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


Вложения
Тип файла: zip ping.zip
(1.4 Kb, 18 просмотров)

Я для таких целей (только модем zyxel) накидал программу на PowerShell
Версия 0.0 так что не ругайте.

В фукнции execTelnet нужно указать адрес Вашего модема:
$remoteHost = 'modem IP'
там же в $currentInput нужно указать пароль для доступа на модем.

Приведенный файл работает для модемов Zyxel... в принципе, если у кого можно проверить что спрашивает Dlink при telnet-входе и что нужно ввести для перезагрузки - могу доработать скрипт, чтобы и параметры можно было ввести и прочие удобства...

Отправлено: 23:41, 06-06-2010 | #3

QRS QRS вне форума

Ветеран


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

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


Комментарии по софтине:

- программу имеет смысл включить в планировщик, например, запуск с интервалом в 10 минут.
- программа регистрирует новый источник лог-сообщений для журнала Application - первый раз ее нужно запустить от имени местного Админа;
- при первом непрохождении ping до ya.ru и google программа создает сообщение в журнале (для мониторинга) - "Ping lost first time" и создает в реестре (в HKCU) запись о сбое;
- при втором подряд непрохождении ping (при втором запуске программы) программа делает запись в журнале и запускает процедуру перезагрузки модема... в диагностических целях попутно выводит в консоль ответ модема.

Отправлено: 23:53, 06-06-2010 | #4


Аватара для Ikari

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


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

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


Хм... никак не могу объединить всю информацию в единое целое для Интеркросс.
Подумываю даже о перепрошивке в ДЛинк
Кстати файлы PS1 (т.е. повершел) не могу запускать из-за невозможности поставить PowerShell себе на WinXP x64
Вот так и сижу методом подбора...
==========
Поправка: повершел удалось присобачить, но результат все равно = 0

-------
Нужный человек в нужном месте может изменить мир (hl2)


Последний раз редактировалось Ikari, 07-06-2010 в 00:22.


Отправлено: 00:10, 07-06-2010 | #5

QRS QRS вне форума

Ветеран


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

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


в Powershell для запуска файлов ps1 необходимо установить политику
set-ExecutionPolicy RemoteSigned

---
а в программе идея в том, что она скармливает по telnet определенный текст с символами "Enter", т.е. в строку $currentInput нужно внести все то, что Вы руками вводите при подключении в telnet.
Например,
если у модем пароль "123" (который модем сразу предлагаем ввести), а для перезагрузки zyxel нужно использовать код sys reboot, то эта строка выглядит так:


$currentInput = @"
123

sys reboot
"@

PS: если вы сможете выложить скриншот окна telnet, где будет виден диалог с модемом (в том числе команда перезагрузки), то я постараюсь Вам порекомендовать как подготовить такую строку.

Отправлено: 06:56, 07-06-2010 | #6


Аватара для Ikari

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


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

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


Изображения
Тип файла: jpg Снимок1.JPG
(56.1 Kb, 9 просмотров)
Тип файла: jpg Снимок2.JPG
(44.3 Kb, 8 просмотров)
Тип файла: jpg Снимок3.JPG
(68.9 Kb, 4 просмотров)
Тип файла: jpg Снимок4.JPG
(61.6 Kb, 4 просмотров)
Тип файла: jpg Снимок5.JPG
(71.7 Kb, 5 просмотров)
Тип файла: jpg Снимок6.JPG
(75.8 Kb, 6 просмотров)

Насчет политики не совсем понял: нужно только выполнить команду в консольном окне PS в %WINDIR%\system32\windowspowershell\v1.0\powershell.exe или %WINDIR%\SysWOW64\windowspowershell\v1.0\powershell.exe ?
=======
Вот что получилось у меня:
читать дальше »
Код: Выделить весь код
############################################################################# 
#Script to ping remote and reboot modem (zyxel) 
#Original name: QRS_modemReboot.ps1
#
#Parameters: not required
#Version: 0.0
#
#Author: as QRS
############################################################################## 


new-eventlog -source QRS_shutdown -logname Application -ea SilentlyContinue

  function Ping-Address {
    PROCESS {
      $ping = $false
      $results = Get-WmiObject -query `
      "SELECT * FROM Win32_PingStatus WHERE Address = '$_'"
      foreach ($result in $results) {
        if ($results.StatusCode -eq 0) {
          $ping = $true
        }
      }
      if ($ping -eq $true) {
        Write-Output $_
      }
    }
  }


## Read output from a remote host 
function GetOutput 
{ 
    ## Create a buffer to receive the response 
    $buffer = new-object System.Byte[] 1024 
    $encoding = new-object System.Text.AsciiEncoding 

    $outputBuffer = "" 
    $foundMore = $false 

    ## Read all the data available from the stream, writing it to the 
    ## output buffer when done. 
    do 
    { 
        ## Allow data to buffer for a bit 
        start-sleep -m 1000 

        ## Read what data is available 
        $foundmore = $false 
        $stream.ReadTimeout = 1000 

        do 
        { 
            try 
            { 
                $read = $stream.Read($buffer, 0, 1024) 

                if($read -gt 0) 
                { 
                    $foundmore = $true 
                    $outputBuffer += ($encoding.GetString($buffer, 0, $read)) 
                } 
            } catch { $foundMore = $false; $read = 0 } 
        } while($read -gt 0) 
    } while($foundmore) 

    $outputBuffer 
} 


function execTelnet{

 [string] $output = "" 
 $remoteHost = '192.168.1.1'
 $port = 23;
 $currentInput = @"
admin

sys reboot
"@

 $commandDelay = 500

 write-host "Connecting to $remoteHost on port $port" 
 trap { Write-Error "Could not connect to remote computer: $_"; exit } 

 $socket = new-object System.Net.Sockets.TcpClient($remoteHost, $port) 

 $stream = $socket.GetStream() 
    
 $writer = new-object System.IO.StreamWriter $stream 

 ## Receive the output that has buffered so far 
 $SCRIPT:output += GetOutput 
 foreach($line in $currentInput) 
 { 
   $writer.WriteLine($line) 
   $writer.Flush() 
   Start-Sleep -m $commandDelay 
   $SCRIPT:output += GetOutput 
 } 

 ## Close the streams 
 $writer.Close() 
 $stream.Close() 
 $output
}

$ping = (('ya.ru','google.com') | Ping-Address)
if($ping -eq $null) {
 $noping = (Get-ItemProperty -path "HKCU:\Software\QRS\ADSLrestart").noPing
 if($noping -eq 1){
   write-eventlog -logname Application -source QRS_shutdown -eventID 03 -entrytype Information -message "Ping lost." -category 1
   . execTelnet
   Set-ItemProperty -path "HKCU:\Software\QRS\ADSLrestart" -name "noPing" -value 0
 }else{
   Set-ItemProperty -path "HKCU:\Software\QRS\ADSLrestart" -name "noPing" -value 1
   write-eventlog -logname Application -source QRS_shutdown -eventID 03 -entrytype Information -message "Ping lost first time." -category 1
 }
}else{
 New-Item -path "HKCU:\Software\" -name "QRS" -type directory -ea 0
 New-Item -path "HKCU:\Software\QRS\" -name "ADSLrestart" -type directory -ea 0
 Set-ItemProperty -path "HKCU:\Software\QRS\ADSLrestart" -name "noPing" -value 0
 write-host Ping is ok!
}

-------
Нужный человек в нужном месте может изменить мир (hl2)


Отправлено: 10:23, 07-06-2010 | #7

QRS QRS вне форума

Ветеран


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

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


В коде нужно подправить:

$currentInput = @"
admin
ЗДЕСЬ ПАРОЛЬ

8
1
1
1
"@

Может быть перед "8" не нужна пустая строка.

Насчет политики:
1. Нужно открыть powershell руками.
2. В открывшемся окне ввести: set-ExecutionPolicy RemoteSigned
и подтвердить что подтверждаешь изменение политики.

Отправлено: 18:37, 07-06-2010 | #8


Аватара для Ikari

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


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

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


Изображения
Тип файла: jpg Снимок16.JPG
(37.2 Kb, 9 просмотров)

Гхм... на set-ExecutionPolicy RemoteSigned PS ничего не отвечал.
Скрипт поправил - ноль положительной реакции.
читать дальше »
#############################################################################
#Script to ping remote and reboot modem (zyxel)
#Original name: QRS_modemReboot.ps1
#
#Parameters: not required
#Version: 0.0
#
#Author: as QRS
##############################################################################


new-eventlog -source QRS_shutdown -logname Application -ea SilentlyContinue

function Ping-Address {
PROCESS {
$ping = $false
$results = Get-WmiObject -query `
"SELECT * FROM Win32_PingStatus WHERE Address = '$_'"
foreach ($result in $results) {
if ($results.StatusCode -eq 0) {
$ping = $true
}
}
if ($ping -eq $true) {
Write-Output $_
}
}
}


## Read output from a remote host
function GetOutput
{
## Create a buffer to receive the response
$buffer = new-object System.Byte[] 1024
$encoding = new-object System.Text.AsciiEncoding

$outputBuffer = ""
$foundMore = $false

## Read all the data available from the stream, writing it to the
## output buffer when done.
do
{
## Allow data to buffer for a bit
start-sleep -m 1000

## Read what data is available
$foundmore = $false
$stream.ReadTimeout = 1000

do
{
try
{
$read = $stream.Read($buffer, 0, 1024)

if($read -gt 0)
{
$foundmore = $true
$outputBuffer += ($encoding.GetString($buffer, 0, $read))
}
} catch { $foundMore = $false; $read = 0 }
} while($read -gt 0)
} while($foundmore)

$outputBuffer
}


function execTelnet{

[string] $output = ""
$remoteHost = '192.168.1.1'
$port = 23;
$currentInput = @"
admin
admin
8
1
1
1
"@

$commandDelay = 500

write-host "Connecting to $remoteHost on port $port"
trap { Write-Error "Could not connect to remote computer: $_"; exit }

$socket = new-object System.Net.Sockets.TcpClient($remoteHost, $port)

$stream = $socket.GetStream()

$writer = new-object System.IO.StreamWriter $stream

## Receive the output that has buffered so far
$SCRIPTutput += GetOutput
foreach($line in $currentInput)
{
$writer.WriteLine($line)
$writer.Flush()
Start-Sleep -m $commandDelay
$SCRIPTutput += GetOutput
}

## Close the streams
$writer.Close()
$stream.Close()
$output
}

$ping = (('ya.ru','google.com') | Ping-Address)
if($ping -eq $null) {
$noping = (Get-ItemProperty -path "HKCU:\Software\QRS\ADSLrestart").noPing
if($noping -eq 1){
write-eventlog -logname Application -source QRS_shutdown -eventID 03 -entrytype Information -message "Ping lost." -category 1
. execTelnet
Set-ItemProperty -path "HKCU:\Software\QRS\ADSLrestart" -name "noPing" -value 0
}else{
Set-ItemProperty -path "HKCU:\Software\QRS\ADSLrestart" -name "noPing" -value 1
write-eventlog -logname Application -source QRS_shutdown -eventID 03 -entrytype Information -message "Ping lost first time." -category 1
}
}else{
New-Item -path "HKCU:\Software\" -name "QRS" -type directory -ea 0
New-Item -path "HKCU:\Software\QRS\" -name "ADSLrestart" -type directory -ea 0
Set-ItemProperty -path "HKCU:\Software\QRS\ADSLrestart" -name "noPing" -value 0
write-host Ping is ok!
}

-------
Нужный человек в нужном месте может изменить мир (hl2)


Отправлено: 21:58, 07-06-2010 | #9

QRS QRS вне форума

Ветеран


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

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


Вы пытаетесь запустить powershell с укзанием скрипта на исполнение.
К сожалению в пути к файлу есть пробел... Вам нужно путь к файлу указывать в двойных кавычках, например,

powershell.exe "D:\users\winroot\Desktop\Ребут модема\ping.ps1"

Отправлено: 23:15, 07-06-2010 | #10



Компьютерный форум OSzone.net » Клиентские ОС Microsoft » Microsoft Windows 2000/XP » Разное - Автоматизация ребута модема Intercross

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Написание Батника или чего нибудь схожего для ребута модема (ADSL) ZTE Spike_LV Скриптовые языки администрирования Windows 5 02-04-2010 13:49
После ребута Win2003 удаляются сетевые принтеры Anatoliy2004 Microsoft Windows NT/2000/2003 9 08-06-2009 21:40
Промышленная автоматизация XCodeR Флейм 2 04-04-2009 22:12
Автоматизация ввода EN130 Программное обеспечение Windows 1 19-05-2008 20:47
первый старт - тухнет экран, после ребута все ок farlow Непонятные проблемы с Железом 13 30-11-2007 13:16




 
Переход