Показать полную графическую версию : Скрипт для проверки пинга
Hunterus
06-12-2011, 10:07
Нужен скрипт для проверки пинга раз в 10 мунут в 5 запросов, если хоть 1 ответ пришел то это считается нормой и процесс повторяется через 10 минут.
Если ни одного ответа не пришло то на COM порт отправляется команда вида echo 111 >com3 на котором в свою очередь висит реле и которое передергивает питание модема
Заранее благодарю за помощь!
Loran_rus
06-12-2011, 12:00
Могу предложить
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
Loran_rus, вроде «echo» просили ;)…Copy 111>Com3 »
Loran_rus
06-12-2011, 13:12
Iska, А это я как художник, "так вижу" :blind:
думаю человек задействовавший реле через ком порт для управления питанием модема в состоянии заменить команду под собственные нужды :)
Hunterus
06-12-2011, 13:13
Loran_rus, вроде «echo» просили …
Цитата Loran_rus:
Copy 111>Com3 » »
Это особой роли не играет, главное чтоб Com порт открылся и закрылся при этом реле разомкнет цепь питания модема
Могу предложить
скрипт на VBS »
попробовал Ваш скрипт, поставил WScript.Sleep 6000 он запускается 2 раза в подряд отрабатывает и все. и возможно ли чтоб как нибудь отображался процесс его работы??
Loran_rus
06-12-2011, 15:39
попробовал Ваш скрипт, поставил 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
возможно ли чтоб как нибудь отображался процесс его работы??
Замените 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
все таки хочется на 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
А в CMD это будет выглядеть так :)
@Echo Off
Ping -n 5 ya.ru>nul
If %ErrorLevel% GTR 0 Echo 111>Com3
Я не любитель использовать скрипты которые постоянно висят и ждут чтобы раз в ХХ минут выполнить какое то действие, для запуска приложений и процессов по времени или через определенный промежуток есть куча инструментов, собственно говоря вы видели что получается "Индийский код" когда я зацикливаю простую и понятную процедуру с ожиданием и перезапуском.
Так что реализацию запуска через 10 минут оставляю на ваше усмотрение
Код взят от сюда
Написал простую пинговалку, выводящее сообщение о результатах:
@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
Freem, для этого случая в предыдущем примере как раз использовалась команда
ping -n 1 %IP% | findstr /i "TTL"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.