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

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

root221 30-08-2012 20:42 1980104

Как сделать что-бы скрипт игнорировал не нужные ответы Ping
 
Здравствуйте,

Нужно что бы скрипт срабатывал только при положительном отклике от сервера, который пингуется а все остальные игнорировал и пытался по новой соединиться с сервером, который указан в скрипте, как только соединение установлено, скрипт должен срабатывать и писать "Результат положительный - Alive" а если всё таки не удаётся в течении 20 секунд никак соединиться, тогда "Результат отрицательный - Done"

вот скрипт который бы я хотел до работать с вашей помощью

:: Скрипт для проверки интернета.
Код:

set WshShell = CreateObject("WScript.Shell")
 Return = WshShell.Run("ping 77.88.21.3 -n 1 -w 400", 0, true)
 If Return=0 then
 WScript.Echo "Результат положительный - Alive"
 Else WScript.Echo "Результат отрицательный - Done"
 End If

Приветствуется скрипт написанный и на CMD/Bat.

root221 30-08-2012 20:46 1980106

Забыл, если сетевую карту на компьютере выключить, то скрипт который выше, сразу же пишет "Результат отрицательный - Done" - а надо сделать, только если в течении 20 секунд сетевую карту не включили в сеть, тогда уже выводить "Результат отрицательный - Done"

Iska 30-08-2012 21:43 1980142

root221, используйте не «ping.exe», а Wbem: Win32_PingStatus class.

root221 31-08-2012 00:25 1980214

Iska, не хотелось бы мне пользоваться дополнительными приложениями.


помогите пожалуйста сделать это на VBS или на CMD

root221 31-08-2012 00:45 1980220

описываю более яснее.

Код:

набираю ping 124.0.1.1

Обмен пакетами с 124.0.1.1 по 32 байт:

Превышен интервал ожидания для запроса.

(Это сообщение нужно игнорировать в течении 20 секунд, если появился удачный пинг за эти 20 сек, тогда вывести "Результат положительный - Alive" если не появится тогда "Результат отрицательный - Done")


Код:

Отключаем сетевую карту

снова набираю ping 124.0.1.1

Обмен пакетами с 124.0.1.1 по 32 байт:

Заданный узел недоступен.
Заданный узел недоступен.

(Это сообщение нужно игнорировать в течении 20 секунд, если появился удачный пинг за эти 20 сек, тогда вывести "Результат положительный - Alive" если не появится тогда "Результат отрицательный - Done")



А вот это наш положительный результат (если пинг удачный тогда вывести сообщение "Результат положительный - Alive" его как вы уже поняли игнорировать не надо)

Код:

снова набираю ping 124.0.1.1

Обмен пакетами с 124.0.1.1 по 32 байт:

Ответ от 124.0.1.1: число байт=32 время<1мс TTL=128


Anonymоus 31-08-2012 03:03 1980247

root221, попробуйте это
Код:

@Echo Off
Set IP=77.88.21.3
Set Timeout=20

Set i=0
:Back
If %i% GEQ %Timeout% (Echo Результат отрицательный - Done&Exit /B 1)
Ping -n 1 -w 400 %IP% 2>nul|Find "TTL=">nul&&(
        Echo Результат положительный - Alive&Exit /B 0
)||(
        Set /A i+=1
        Ping -n 2 -w 1000 127.0.0.1>nul
        GoTo Back
)

А ещё у вас личка переполнена сообщениями, не отослать ничего.

root221 31-08-2012 05:09 1980261

Всё хорошо, но лучше всё таки переписать не много... Спасибо за ранее.

набираю ping 124.0.1.1

Обмен пакетами с 124.0.1.1 по 32 байт:

Превышен интервал ожидания для запроса.

(Это сообщение нужно игнорировать в течении 20 секунд, если появился удачный пинг за эти 20 сек, тогда вывести "Результат положительный - Alive" если не появится тогда если появится это сообщение тогда сразу выводить "Результат отрицательный - Done")

root221 31-08-2012 05:31 1980267

Цитата:

Цитата Anonymоus
А ещё у вас личка переполнена сообщениями, не отослать ничего. »

Щас исправим.

Iska 31-08-2012 07:19 1980281

Цитата:

Цитата root221
Iska, не хотелось бы мне пользоваться дополнительными приложениями. помогите пожалуйста сделать это на VBS или на CMD»

Ощущение такое, что Вы материал по ссылке и не смотрели. Это и есть решение для Windows Script Host, равно как и под любого другого клиента Automation.

root221 31-08-2012 07:36 1980285

Iska, вы можете написать готовое решение из предложенного? просто у меня нет времени разбираться в том материале, когда это можно написать и на CMD...

Iska 31-08-2012 09:23 1980314

root221, как Вы думаете, а у кого оно есть — время…

root221 31-08-2012 19:08 1980756

Iska, для тех кто часто занимается скрипто писанием и щёлкает их как орешки, много труда написать не составит, да и времени много не отнимет, т.к человек уже заранее знает, что надо написать в скрипте, что бы он работал так, как просит автор темы.

Ранее я тоже этим занимался в плотную, щас просто позабыл и нету времени восстановить, свои познания в этом деле.

P.S поэтому я обратился на форум за помощью.

Цитата:

Цитата Iska
root221, как Вы думаете, а у кого оно есть — время… »

Ну некоторые, всё-же находят время, что-бы помогать другим участникам форума.

root221 31-08-2012 23:10 1980886

Попытаюсь вам заново объяснить то что мне нужно, я думаю вы меня просто плохо поняли.


Нужно следующее.

Всё на примерах.

=========================
Например я в консоле ввожу ping 192.168.0.1 (Комп вкл.)

пошли ответы

Ответ от 192.168.0.1: число байт=32 время<1мс TTL=128

тогда нужно что бы скрипт моментально выводил на экран сообщение что интернет есть.

=========================

далее

опять же например я в консоле ввожу ping 192.168.0.1 (Комп выкл.)

пошли ответы

Превышен интервал ожидания для запроса.

тогда нужно что бы скрипт моментально выводил на экран сообщение что интернета нет.

==========================

опять же далее

Например я в консоле ввожу ping 192.168.0.1 (Комп вкл.)

пошли ответы

Заданный узел недоступен.

вот тут ВНИМАТЕЛЬНЕЕ - тогда нужно что бы скрипт выводил на экран сообщение только через 20 сек что Заданный узел недоступен.

p.s выводит он это сообщение если адаптер отключен и мне нужно что-бы он это сообщение игнорировал 20 сек а если по истечению 20 сек адаптер не вкл. тогда выводить это сообщение Заданный узел недоступен. а если за эти 20 сек его включили тогда другие сообщения "моментальные", либо есть интернет, либо нету.
==========================

root221 02-09-2012 22:28 1981862

в общем сделал так

Код:


:TestMsgInt

setlocal enabledelayedexpansion
 
for /f %%t in ('ping 87.250.250.3 -n 2 -w 500') do (
    echo."%%t" | find "Ответ">nul && (
    echo WScript.Echo "╚эЄхЁэхЄ ЁрсюЄрхЄ." >"%WinDir%\temp\msgint.vbs" && start /B "" "%WinDir%\temp\msgint.vbs"
        exit /b 1
    )
    echo."%%t" | find "Превышен">nul && (
    echo WScript.Echo "╚эЄхЁэхЄ эх ЁрсюЄрхЄ." >"%WinDir%\temp\msgint.vbs" && start /B "" "%WinDir%\temp\msgint.vbs"
        exit /b 1
    )
    echo."%%t" | find "Заданный">nul && (
    EndLocal
    GoTo :TestMsgInt
    )
    echo."%%t" | find "При">nul && (
    EndLocal
    GoTo :TestMsgInt
    )
)

Теперь возникает вопрос а как сделать что бы проверка была не по find а например по ErrorLevel Ведь если я захочу использовать этот скрипт в анг версии Windows то мне каждый раз придётся менять русское значение которое ищет find на английское.


Время: 08:10.

Время: 08:10.
© OSzone.net 2001-