Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Скрипт для проверки пинга (http://forum.oszone.net/showthread.php?t=222265)

Hunterus 06-12-2011 10:07 1810153

Скрипт для проверки пинга
 
Нужен скрипт для проверки пинга раз в 10 мунут в 5 запросов, если хоть 1 ответ пришел то это считается нормой и процесс повторяется через 10 минут.
Если ни одного ответа не пришло то на COM порт отправляется команда вида echo 111 >com3 на котором в свою очередь висит реле и которое передергивает питание модема

Заранее благодарю за помощь!

Loran_rus 06-12-2011 12:00 1810233

Могу предложить
скрипт на VBS

Код:

On Error Resume Next
Call Main
Private Sub Main
Set objShell = WScript.CreateObject("WScript.Shell")
Set objExecObject = objShell.Exec("Cmd /c ping -n 5 www.ya.ru")

Do While Not objExecObject.StdOut.AtEndOfStream
        strText = objExecObject.StdOut.ReadLine()
        If Instr(strText, "(100% ") > 0 Then
                objResult = objShell.Run ("Cmd /c Copy 111>Com3" , 0, True)
        End If
Loop
End Sub

WScript.Sleep 600000        'время = 10мин * 60сек * 1000
Call Main


Iska 06-12-2011 12:26 1810246

Loran_rus, вроде «echo» просили ;)…
Цитата:

Цитата Loran_rus
Copy 111>Com3 »


Loran_rus 06-12-2011 13:12 1810284

Iska, А это я как художник, "так вижу" :blind:
думаю человек задействовавший реле через ком порт для управления питанием модема в состоянии заменить команду под собственные нужды :)

Hunterus 06-12-2011 13:13 1810288

Цитата:

Цитата Iska
Loran_rus, вроде «echo» просили …
Цитата Loran_rus:
Copy 111>Com3 » »

Это особой роли не играет, главное чтоб Com порт открылся и закрылся при этом реле разомкнет цепь питания модема

Цитата:

Цитата Loran_rus
Могу предложить
скрипт на VBS »

попробовал Ваш скрипт, поставил WScript.Sleep 6000 он запускается 2 раза в подряд отрабатывает и все. и возможно ли чтоб как нибудь отображался процесс его работы??

Loran_rus 06-12-2011 15:39 1810385

Цитата:

Цитата Hunterus
попробовал Ваш скрипт, поставил WScript.Sleep 6000 он запускается 2 раза в подряд отрабатывает и все

сильно изменяюсь действительно вставил из буфера еще сырую версию
вот полностью рабочая

Код:

Set objShell = WScript.CreateObject("WScript.Shell")
Call Main
Private Sub Main
Set objExecObject = objShell.Exec("Cmd /c ping -n 5 www.ya.ru")
Do While Not objExecObject.StdOut.AtEndOfStream
        strText = objExecObject.StdOut.ReadLine()
        If Instr(strText, "(100% ") > 0 Then
                objResult = objShell.Run ("Cmd /c Echo 111 >Com3" , 0, True)
                Call WaitTime
        End If
Loop
End Sub
Call WaitTime
Private Sub WaitTime
WScript.Sleep 600000        'время = 10мин * 60сек * 1000
Call Main
End Sub


Цитата:

Цитата Hunterus
возможно ли чтоб как нибудь отображался процесс его работы??

Замените objResult = objShell.Run ("Cmd /c Echo 111 >Com3" , 0, True) на запуск приложения или открытие документа, ну или целиком строку.
Если желаете посмотреть работу команды пинг вот тот же скрипт с записью в
текстовый файл

Код:

Dim fso, f1, ts
Const ForWriting = 2
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateTextFile ("pingtest.txt")
Set f1 = fso.GetFile("pingtest.txt")
Set ts = f1.OpenAsTextStream(ForWriting, True)

Set objShell = WScript.CreateObject("WScript.Shell")
Call Main
Private Sub Main
Set objExecObject = objShell.Exec("Cmd /c ping -n 5 www.ya.ru")
Do While Not objExecObject.StdOut.AtEndOfStream
        strText = objExecObject.StdOut.ReadLine()
ts.WriteLine strText
        If Instr(strText, "(100% ") > 0 Then
                objResult = objShell.Run ("Cmd /c Cmd /c Echo 111 >Com3" , 0, True)
                Call WaitTime
        End If
Loop
ts.Close
End Sub
Call WaitTime
Private Sub WaitTime
WScript.Sleep 600000        'время = 10мин * 60сек * 1000
Call Main
End Sub


Hunterus 07-12-2011 13:21 1810947

все таки хочется на bat скрипт запустить
сижу вот из этого переделываю:

for /f "tokens=8 delims== " %%i in ('ping -n 1 google.ru ^| findstr /i "TTL"') do set n=%%i
if defined n (goto n1)
echo нет пинга
exit /b
:n1
set /a n=%n:~0,-2%
if %n% gtr 100 start "" notepad.exe




пока ничего не получается
:(

Loran_rus 07-12-2011 14:04 1810981

А в CMD это будет выглядеть так :)
Код:

@Echo Off
Ping -n 5 ya.ru>nul
If %ErrorLevel% GTR 0 Echo 111>Com3

Я не любитель использовать скрипты которые постоянно висят и ждут чтобы раз в ХХ минут выполнить какое то действие, для запуска приложений и процессов по времени или через определенный промежуток есть куча инструментов, собственно говоря вы видели что получается "Индийский код" когда я зацикливаю простую и понятную процедуру с ожиданием и перезапуском.

Так что реализацию запуска через 10 минут оставляю на ваше усмотрение

Код взят от сюда

Freem 27-12-2011 10:31 1823180

Написал простую пинговалку, выводящее сообщение о результатах:
Код:

@echo off
ping -n 1 %IP%
echo
if %errorlevel%==0 (
echo =================================
echo =======TEXT 1=======
echo =================================
)
if %errorlevel%==1 (
echo =================================
echo ==========TEXT 2==========
echo =================================
)
pause

Но нужно чтобы TEXT 2 выводился, если пинг отвечает также полученными пакетами "заданный узел недоступен". Иначе у меня везде первый текст выходит.

Dragokas 28-12-2011 12:19 1824057

Freem, для этого случая в предыдущем примере как раз использовалась команда
ping -n 1 %IP% | findstr /i "TTL"


Время: 18:25.

Время: 18:25.
© OSzone.net 2001-