Компьютерный форум 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=161182)

registeruser1 23-12-2009 07:45 1302217

Обычный пинг, но нужно что бы все что там он пишет в окне дублировалось в лог-файл
 
Доброго всем дня.

Помогите мне доделать Bat-ник не большой.
Это обычный пинг, но нужно что бы все что там он пишет в окне дублировалось в лог-файл txt.
Найти то я это нашел как делать, но проблема у меня немного шире. Та команда просто переписывает в файле все заново...
А мне нужно что бы это все это копилось там в файле...
Вот мой вариант -

@Echo Off
echo --------------------------------------------------------
ping -n 5 127.0.0.1
echo --------------------------------------------------------
echo Complette time pinging %time%
@Echo Off
echo.
echo.
echo.
Echo Pause 60 seconds. Please Wait...
echo.
ping -n 60 127.0.0.1 > nul
"%~f0"



IP соответственно другой...
Если можно как-нибудь заставить его вести обратный отсчет времени, будет просто супер...!
Заранее благодарю....

NiOl 23-12-2009 12:20 1302389

1. Символ ">" создает файл заново, а ">>" добавляет к уже имеющемуся (если файла нет, то создает его).
2. На счет обратного отсчета времени и задания вообще - непонятно - может выложишь сюда проблему - народ что-нибудь предложет.

vitaliyboch 23-12-2009 14:37 1302492

Я обратный отсчет вот так делаю:
bat-файл, в консоли которого и происходит все действо:
Код:

CSCRIPT "%~DP0\Reboot.vbs"
Shutdown.exe -r -t 00 -c "Administrative reboot."

vbs-файл, который вызывается из bat-файла, он, собственно и реализует обратный отсчет на 120 секунд с показом сообщения в консоли каждые 5 секунд:
Код:

For i=120 To 0 Step -5
  WScript.echo "The system will be rebooted in " & i & " seconds"
  WScript.Sleep(5000)
Next

оба скрипта и файл Shutdown.exe должны лежать в одном каталоге

registeruser1 23-12-2009 15:06 1302513

...Ок. Спасибо, работает.

Теперь такая проблема. Это у меня логи пингов. Как вы видите батник создает лог с текущей датой.
Это для того что бы потом можно было проанализировать по этим логам время когда отсутствовала связь.
Просто часто пропадает связь. Нужно выяснить переодичность.
Но, теперь батник все пинги добавляет как надо, дописывает в конец. И податам должен разбивать (еще не проверял, сегодня ночью только сделал).
Но вот проблема - как туда в данный лог загнать дату и время каждго пинга.

Вот что сейчас получилось -

--------------------------------------------------------------------

Pinging 127.0.0.1 with 32 bytes of data:

Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63

Ping statistics for 127.0.0.1:

Packets: Sent = 5, Received = 5, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms

Pinging 127.0.0.1 with 32 bytes of data:

Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63

-------------------------------------------------------------------

А вот как хотелось бы -

--------------------------------------------------------------------
Date 23-12-2009 16;53;30
Pinging 127.0.0.1 with 32 bytes of data:

Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63

Ping statistics for 127.0.0.1:

Packets: Sent = 5, Received = 5, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms


Date 23-12-2009 16;54;30
Pinging 127.0.0.1 with 32 bytes of data:

Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63

-------------------------------------------------------------------

Суть в том что бы можно было отследить когда не было связи и переодичность
обрывов. А в таком варианте все пинги без дат и времени и ни как не отследишь
когда был обрыв.

В принципе в самом батнике и дату и время я прописал.
В самом окне это отображается, но в логи не пишется.
Вот в чем проблема по сути.

Очень прошу помочь, заранее благодарю.

registeruser1 23-12-2009 16:15 1302590

Вот полный вариант батника -



@Echo Off
echo.
echo --------------------------------------------------------------------------
echo TEL. NUMBER 7777 [MAC ADRESS 00-0E-EF-A9-CF-96]
echo Date %date:~0,2%-%date:~3,2%-%date:~6,4% %time%
echo --------------------------------------------------------------------------
ping -n 5 127.0.0.1
ping -n 5 127.0.0.1>> %DATE%.txt
echo --------------------------------------------------------------------------
echo Complette time pinging %time%
@Echo Off
echo.
echo.
Echo Pause 60 seconds. Please Wait...
echo.
ping -n 60 127.0.0.1 > nul
"%~f0"


МНЕ НУЖНО ЧТО БЫ РЕЗУЛЬТАТ ЭТОЙ СТРОКИ -
echo Date %date:~0,2%-%date:~3,2%-%date:~6,4% %time% (это дата и время).

ТОЖЕ ПИСАЛСЯ В ЛОГ ФАЙЛ.

Спасибо.

NiOl 23-12-2009 22:34 1302917

Как я понял ТЗ:
1. Батник запускается либо ручками либо по заданию - т.е. все время на компе не висит (это хорошо, т.к. CMD как и любой интерпретатор дико жрет ресурсы - CPU time) и надо просто собирать лог когда пинги не проходили (удачные пинги нас мало интересуют). Логи разбиваются по датам (в примере сортировка жутко неудобная - поверь, я так когда-то по заданию бэкапил базы 1С а потом разбирался где и что). Но я бы держал все в одном файле.
2. Если такая бякость как отваливание интерфейса случается, то желательно держать батник всегда, но чтобы он "не светился" и постараться не слишком нагружать проц.

как вариант относительно универсальное решение, но пинг какого-то конкретного адреса мне не совсем понятен - либо это шлюз ISP либо пинг внешнего IP удаленного офиса, где как раз проблемы и бывают. Если пингуется что-то из своей сети для тестирования своей сети, то желательно пинговать сразу несколько адресов, например шлюз ISP, какой-нить "ya.ru", "cnn.com", "w3c.org" - если хоть кто-то откликнулся - значит иНет скорее есть, чем нет, а проблема не у Вас, а у пингуемого ресурса...
Код:

@Echo off
SetLocal EnableExtensions

rem Флаг подпроцесса. Устанавливается в режиме Multi. Запуск батника с параметром "." запрещен!
if "%1"=="." Goto Once

set Name=%~dpn0
set Ext=%~x0

rem Значения "по-умолчанию"
set IP=ya.ru
set Wait=120
set LogFile=%Name%.txt

set Log=SingleLog
rem set Log=MultiLog

set Mode=Once
rem set Mode=Multi


rem Чтение и обработка параметров. Порядок любой, возможны повторы.
:ParamChk
cls
rem Инфа для сообщения о неправильном параметре. Если все ОК, то инфа пропадет.
if "%1"=="" Goto %Mode%
Echo Error! Wrong Parameter!
Echo.
Echo Use: %Name% [/W nnn] [/IP addr] [/O] [/i] [/S] [/M]
Echo.
Echo  /W - Wait for nnn Seconds between Tests
Echo  /IP - Destination Address (IP or FQDN). * If Address FQDN (like ya.ru) - Test can fail on DNS
Echo  /O or /I - Instance: Once or Infinite (use TaskManager to Break CMD service)
Echo  /S or /M - LogFile Name: Single (ChkNet.txt) or Multi (Based on Date, Ex: ChkNet_2009-12-23.txt)
Goto P%1

:P/W
if not "%2"=="" set Wait=%2
shift & shift & goto ParamChk

:P/IP
if not "%2"=="" set IP=%2
shift & shift & goto ParamChk

:P/O
set Mode=Once
shift & goto ParamChk

:P/I
set Mode=Multi
shift & goto ParamChk

:P/S
set Log=SingleLog
shift & goto ParamChk

:P/M
set Log=MultiLog
shift & goto ParamChk


:Once
rem дата/время в виде yyyy-mm-dd_hh-mm-ss - очень удобно для имен файлов и логов
set tm=%time::=-%
set tm=%date:~6,4%-%date:~3,2%-%date:~0,2%_%tm:~0,-3%
goto %Log%
:MultiLog
rem Высчитываем новое имя файла Лога (если включен режим /M)
set LogFile=%Name%_%tm:~0,10%.txt
:SingleLog
rem Пингуем ресурс и если ошибка - записываем в лог текущие дату/время. * После команды Ping сразу должна идти команда IF
ping -n 1 %IP% >nul
if errorlevel 1 echo %tm%>>%LogFile%

if %Mode%==Once exit

rem Задержка перед следующим пингом. Адрес лучше не менять
ping -n %Wait% 127.0.0.1 >nul
Goto Once

:Multi
Запуск самого себя в виде процесса - т.е. как "программа" батник виден не будет.
start /b /low %Name%%Ext% .


registeruser1 24-12-2009 04:06 1303054

...Спасибо большое. Очень полезная штука. Я даже и незнал что в батниках так много переменных.
Сильно этим не баловался... А теперь вот приперло...

Код конечно хороош, но мне не все тут нужно. Хотя некоторые вещи я взял отсюда. Благодарю...

Вот что мне нужно было в итоге -

@Echo Off
:begin
set /A count=count+1
echo --------------------------------------------------------
echo TESTING & MONITORING IP PHONE "COMPANY NAME"
echo TEL. NUMBER XXXX [MAC ADRESS 00-0E-EF-A9-CF-96]
echo Date %date:~0,2%-%date:~3,2%-%date:~6,4% Time%time%
echo --------------------------------------------------------
echo TESTING MONITORING IP PHONE "COMPANY NAME">> %DATE%.txt
echo Phone NUMBER XXX [MAC ADRESS 00-0E-EF-A9-CF-96]>> %DATE%.txt
echo Date %date:~0,2%-%date:~3,2%-%date:~6,4% Time%time%>> %DATE%.txt
ping -n 5 127.0.0.1
ping -n 4 127.0.0.1>> %DATE%.txt
if errorlevel 1 echo PING NO SUCCESSFULL ERROR-5300 %time%>> %DATE%.txt
echo.
echo --------------------------------------------------------
if errorlevel 0 echo ********************************************************>> %DATE%.txt
echo Pause: 30 seconds.>> %DATE%.txt
if errorlevel 0 echo ********************************************************>> %DATE%.txt
echo.
if errorlevel 1 echo PING NO SUCCESSFULL %time%
@Echo Off
Echo Pause 30 seconds. Please Wait...
ping -n 30 127.0.0.1 >nul
cls
echo.
echo Pinging number %count%
goto begin

...Потом нужно модифицировать этот код.

Потому как я не смог сюда прикрутить параметры записи в лог файл только тех записей которые не пингуются...
В данном варианте пишутся все записи пингов, а потом просто ctrl+F и набираю в строке поиска 5300 и он ищет
соответствующие записи с таким текстом. А это у меня что-то типа кода ошибки. Вот так я пока вышел из положения...

Потом еще предстоит пару бессонных ночей и все будет нормально думаю...

БЛАГОДАРЮ ВСЕХ КТО МНЕ ПОМОГ...
reginfonet@yandex.ru (это на всякий случай).
Удачи...

registeruser1 24-12-2009 20:36 1303570

...Это опять я. Приветствую.

Проблема такая.
Такие батники (их будет порядка 10) будут запущены на отдельно выделенной для этого машине и
нужно что бы этот они сохраняли логи на другом сервере...
Где и как прописать путь сохранения логов?..!!!

Заранее благодарю...

NiOl 25-12-2009 15:51 1304080

1. Если нужно, что бы результат какой-либо команды выводился на экран, если все ОК или в файл, если произошла ошибка, то перед перенаправлением используют номер типа сообщения (не помню как правильно называется). Чаще всего используют код "2" - ошибка. Например, ping -n 1 127.0.0.1 2>>Error.txt - если ошибки не было - сообщение будет на экране, если пинг не прошел - то в файле Error.txt

2. Если у пользователя, от чьего имени запускаются батники, есть доступ к расшаренной на другом компе папки, то в один файл легко можно скидывать лог аж сразу с нескольких батников, т.к. проблема может возникнуть только если сообщение будет выводится одновременно. В качестве имени файла указывается полный путь: \\ServerName\ShareName\File. Если в пути встречаются пробелы и прочие нехорошие символы ;) то весть путь берется в двойные кавычки: "\\SRV01\Data\Any Logs\IP Phone.log"

Denis-reut 12-10-2010 00:08 1516750

Коллеги, доброй ночи. По последнему комментарию
"1. Если нужно, что бы результат какой-либо команды выводился на экран, если все ОК или в файл, если произошла ошибка, то перед перенаправлением используют номер типа сообщения (не помню как правильно называется). Чаще всего используют код "2" - ошибка. Например, ping -n 1 127.0.0.1 2>>Error.txt - если ошибки не было - сообщение будет на экране, если пинг не прошел - то в файле Error.txt" - так не получается...
то есть, суть проблемы - после выполнения пинга, не важно, с выводом в лог (типа C:\windows\system32\ping 192.168.1.3 >>D:\Diagnostic\%date%.txt) или нет, я не хотел бы разбираться, что вывалилось в лог, а следом создать маленькую логичечкую команду, которая бы проверяла, что если пинг был, то записать "ок" (типа if errorlevel 0 echo OK >>D:\Diagnostic\%date%.txt), а если нет, то записать в лог "alarm".
Не пойму, где засада!
Заранее благодарю!

amel27 12-10-2010 01:32 1516784

Цитата:

Цитата Denis-reut
если пинг был, то записать "ок" (типа if errorlevel 0 echo OK >>D:\Diagnostic\%date%.txt), а если нет, то записать в лог "alarm". »

Код:

(ping -n 1 192.168.1.1 && echo ok || echo alarm
)>>"D:\Diagnostic\%date%.txt"


Denis-reut 12-10-2010 10:08 1516949

Доброе утро.
Решение хорошее - (ping -n 1 192.168.1.1 && echo ok || echo alarm
)>>"D:\Diagnostic\%date%.txt"
но в таком случае все выполнение команды ping валится в лог (насколько я понял, из-за наличия круглых скобок).
У меня получилось, как мне кажется, более интересно, так как смог разобраться с кодами возврата и в лог теперь складываются только результаты:
C:\windows\system32\ping 192.168.1.1 -n 3
if not errorlevel 1 echo OK >>"D:\Diagnostic\%date%.txt"
if errorlevel 1 echo ALARM >>"D:\Diagnostic\%date%.txt"
Уверен, что можно было две последних строки реализовать одной с помощью команды ELSE, но почему-то у меня не получилось и я пока остановился на достигнутом... но в любом случае спасибо!

NiOl 12-10-2010 10:28 1516956

саму проверку можно сделать так: (if errorlevel 1 (echo ALARM) else (echo OK)) >>"D:\Diagnostic\%date%.txt"

А еще ErrorLevel можно использовать как переменную: set Err=%ErrorLevel% а дальше работать с ней как угодно.
Еще, если варианты кода ошибки ограничены по кол-ву и заранее известны, то можно обработать так:
GoTo :Err%ErrorLevel%
:Err0
:Err2

amel27 12-10-2010 10:48 1516975

Цитата:

Цитата Denis-reut
все выполнение команды ping валится в лог »

как заказывали ;),
результаты пинга можно подавить:
Код:

@(ping -n 1 192.168.1.1 >nul 2>&1&& echo ok || echo alarm
)>>"D:\Diagnostic\%date%.txt"


Denis-reut 13-10-2010 09:40 1517713

NiOl , amel27 , оба Ваши идеи хороши, спасибо за предложение!
Но теперь у меня есть еще один вопрос.
Для обобщения полученных диагностических данных и получения картины, скажем, за месяц было бы здорово всю информацию из лога (с расширением txt) закидывать в предварительно подготовленный документ excel в нужные ячейки, то есть там сделать таблицу: горизонтально - даты, вертикально - IP-адреса. И затем результаты размещать в нужных ячейках. Тогда была бы вообще красота - открываешь экселёвый документ и сразу видишь, как машинки работали за период времени, где и когда были траблы и т. д.
Что скажете?

amel27 13-10-2010 12:51 1517867

Цитата:

Цитата Denis-reut
Что скажете? »

скажем, свести батником все текстовики в один CSV, который уже открывать EXCEL, но если ПК по строкам, логичней сохранять по машинкам типа "%ComputerName%.txt", а там поля "дата:результат"

Denis-reut 14-10-2010 15:06 1518783

У меня вот какая мысль появилась - сразу делать в виде диагностики не *.txt, а xls-файл, и плюс создать обощенную таблицу (тоже в екселе) с именами компов и днями. В нем создать гиперссылки на значения в ежедневных файликах (они будут называться по дате), в которых структура меняться не будет. Таким образом, в сводной таблице будет отображена общая картина по компам и дням сразу.

amel27 15-10-2010 03:12 1519242

Denis-reut, это уже скорее в VBS/VBA, рядом тема: Тестирование сетки

NiOl 15-10-2010 13:21 1519473

Непонятно только, если нужен запутанный отчет, то почему сразу XLS... по мне - так приятнее в виде HTML (ИМХО).

Denis-reut 16-10-2010 11:30 1519997

NiOl, по поводу html можно поподробнее? Есть какие-то реализации на данную тему?

NiOl 18-10-2010 13:19 1521436

Наработок по пингам нету, но генерить HTML-ки в пакетных файлах не столь сложно. Просто много символов "^" приходится использовать. Но чтобы ваять такую отчетность, нужно сызнова разобраться в условиях того, что нужно - скрипт запускается временами / висит всегда (и впустую нагружает CPU) / самостоятельно запускается раз в какое-то время (и не нагружает систему, но при глюке планировщика свалится), просматривает компы в локальной сети - все ли компы отвечают на пинг? (я на такое наткнулся некоторое время назад, решение есть), как генерится отчетность (автоматом раз в сутки или по запросу), действительно ли нужно генерить море страниц "по дням", какая инфа должно отображаться в отчетности, желательно с образцом того, что нужн на выходе.

bibo.bara 12-03-2011 07:22 1632986

День добрый,
можно ли средством батника отправить им же записанный лог по почте, по завершению пинга? Заранее сенкс....

Iska 12-03-2011 14:39 1633214

Цитата:

Цитата bibo.bara
можно ли средством батника отправить … по почте »

bibo.bara, сделайте расширенный поиск в разделе по ключевому слову «blat».

Denis-reut 14-03-2011 08:53 1634371

Доброе утро.
Я тоже рекомендую использовать для этих целей blat.exe. Единственное "но" - если используете в качестве антивиря мак'афи - добавьте в исключение blat.exe для доставки сообщений. У меня цепочка такая - первым батником проводится диагностика, если все нормально - просто пишется лог. Если есть трабл - запускается второй батник, который запускает blat. очень просто и надежно.

Denis-reut 14-03-2011 09:37 1634402

Забыл добавить - по поводу отправки лога, который был создан батником: если пингуется достаточно большой диапазон IP-адресов, то возможна ситуация, когда первый или второй (или и первый, и второй) по списку IP-адрес будет недоступен, blat сформирует и отправит письмо, а в нем остальной диагностики не будет (или будет неполной), потому что диагностика еще не выполнилась. Задержку в синтаксисе команды blat сделать нельзя. Выход - в теле письма указывать ссылку на сформированный лог, например, \\server\diagnostic\%date%.txt

bibo.bara 14-03-2011 11:11 1634452

Замечательная программа, настроил отправку по датам... Ещё раз всем спасибо!


Время: 19:29.

Время: 19:29.
© OSzone.net 2001-