PING с Записью в Файл и Отображением Времени

«PING с Записью в Файл и Отображением Времени». Всем здравствуйте. Столкнулся с ситуацией когда надо  весь PING залогировать с отображением времени.  Устанавливать различные программы на сервер не хочется. Сразу пришла в голову мысль о CMD только как это сделать??? Начал копать интернет, нашел очень много различных скриптов, но что-то работать ничего не хотело. Как я ни бился как не старался но время никак не хотело прописываться в логах PING. Долго я провел время на различных тематических форумах, и наконец заработало.

PING с записью в файл:

Вот собственно и сам скрипт. Его можно немного отредактировать и пометь для своих целей. Если вы не хотите экспериментов, то смело пролистывайте вниз там вы найдете готовый zip архив.

Скрипт:

option explicit 
' conHost -- адрес хоста для слежения 
' conCheckInterval -- временной интервал 
const conHost = "8.8.8.8", conCheckInterval = 999

' создаём объект: 
dim soWshShell : set soWshShell = CreateObject("WScript.Shell") 
WScript.Quit Main() 

function WriteLog(strText) 
  WScript.Stdout.WriteLine FormatDateTime(Time(), vbLongTime) & " " & strText
end function 

function GetHostStatus(strHost) 
  dim oPing : set oPing = soWshShell.Exec("ping -n 1 " & strHost) 
  dim strOut : strOut = "" 
  do 
    WScript.Sleep 100 
    if not oPing.Stdout.AtEndOfStream then 
      strOut = strOut & oPing.Stdout.ReadAll 
    end if 
  loop until oPing.Status = 1 

  dim oRegExp : set oRegExp = new RegExp 
  oRegExp.IgnoreCase = true 
  oRegExp.Pattern = "[^ ]+:.+TTL=[^\r\n]+" 
  dim oMatches : set oMatches = oRegExp.Execute(strOut) 
  if oMatches.Count > 0 then 
    GetHostStatus = oMatches(0).Value 
  else 
    GetHostStatus = "Inaccessible!.." 
  end if 
end function 

function Main() 
  do 
    WriteLog(GetHostStatus(conHost)) 
    WScript.Sleep(conCheckInterval) 
  loop 
end function

Скачать готовый скрипт.

Далее все просто скопировали скрипт допустим в  корень диска C:
PING с записью в файл и отображением времени
PING с записью в файл
Осталось ввести команду:  cscript //nologo pingtime.vbs>pingtime.log 
PING с записью в файл и отображением времени
Вводим команду для запуска скрипта
Сразу же рядом со скриптом появится файл pingtime.log, открыв его вы увидите ping и время пинга вот в таком формате.
PING с записью в файл
Открытый файл pingtime.log
Важно: В файле pingtime.log иногда не читабельный текст. Данная проблема возникает из-за кодировки. Чтоб избежать этого смените кодировку. Либо просто поменяйте текстовый редактор. Мне нравится Notepad++ он подсвечивает код и в нем очень много настроек.
Вот в принципе и все. Если кому то помог то значит статью писал не даром.

Скачать готовый скрипт.

Скачав архив вы найдете 3 файла.

  1. pingtime.vbs
  2. start.bat
  3. pingtime.log

Чтоб не заморачиваться рекомендую скачать и распаковать архив, запустить start.bat. И уже через пару секунд вы увидите pingtime.log начнет записывать пинги.

Nazario

Я — Nazario, создатель и автор сайта linuxwin.ru, специализируюсь на информационных технологиях с акцентом на системное администрирование Linux и Windows, веб-разработку и настройку различных систем.

Linux и Windows
Выскажите своё мнение или присоединяйтесь к обсуждению:

Отправляя комментарий, вы даете согласие на обработку ваших данных в соответствии с политикой конфиденциальности и даёте согласие на их использование.

  1. Анонимный

    Спасибо большое помогло.

    Ответить
  2. Mr.Zlo

    с горем попалам сделал…. а вообще током нихрена не понятно….

    Ответить
  3. admin

    Что именно не понятно??? Что поменять чтоб было более понятней?

    Ответить
  4. Анонимный

    Мерси…

    Ответить
  5. Анонимный

    при записи в файл ползут иероглифы. Как исправить???

    Ответить
  6. admin

    Думаю стоит попробовать поменять кодировку файла .txt

    Ответить
  7. Дмитрий К

    кириллицу не пишет в логе. Набор символов

    Ответить
  8. Nazario

    Поменяйте кодировку в вашем логе и будет счастье.

    Ответить
    1. user

      Спасибо

      Ответить
  9. Black

    Ой спасибо то что нужно. Говорят точки wi-fi отваливаются. А доказать ничего не могу. Вот теперь с логом все будет предельно ясно.

    Ответить
  10. Zorro

    Спасибо!

    Ответить
  11. Alex

    oRegExp.Pattern = «[^ ]+:.+TTL=[^rn]+»
    тут последний плюс лишний

    Ответить
    1. Nazario автор

      Спасибо большое! Исправил!!!

      Ответить
  12. Max

    Выдает данную ошибку
    C:\pingtime.vbs(1, 1) Ошибка компиляции Microsoft VBScript: Недопустимый знак

    Ответить
    1. Nazario автор

      Привет Макс! Статью чуть исправил, там был Лишний +
      Так же сделал архив куда закинул скрипт и батник для запуска. так что скачай, распакуй и пользуйся 😉
      Если не доверяешь что там за файлы, они спокойно открываются текстовым документом. 😉
      Кстати у тебя скорее всего была ошибка из-за кодировки самого скрипта.

      Ответить
      1. Max

        Когда перехожу по данной ссылке:
        Написано: «Ничего не найдено
        Владелец удалил файлы либо закрыл к ним доступ или в ссылке опечатка.»

        Ответить
        1. Nazario автор

          ссылку обновил тоже.

          Ответить
          1. Max

            Спасибо)

        2. Nazario автор

          https://yadi.sk/d/R2qJk4Nvi5F_Sw если что то вот она.

          Ответить
    2. Nazario

      Ах да совсем забыл, если удалить pingtime.log то при запуске скрипта он появится снова! ?

      Ответить
  13. Алекс

    @echo off
    rem pinger v2.1
    setlocal>nul
    rem в этот файл будет выведен лог работы команды ПИНГ
    set filelogname=»outlog.txt»
    rem адрес, который следует пинговать
    set iptoping=»8.8.8.8″
    cls
    echo ping %iptoping% ……..

    rem время в формате 23:15:51,50
    set xxa=%TIME%

    rem дата в формате 07.09.2016
    set xxd=%DATE%

    rem формирование трех имен для временных файлов вида
    rem ~0809201630121088.tmpp1
    rem ~0809201630121089.tmpp1
    rem ~0809201630121080.tmpp1

    rem формирование строки текущего времени (для назв. временн. файлов)

    rem кол-во единиц часов+кол-во минут+кол-во секунд+кол-во д.секунд (без раздел.)
    set xxb=%xxa:~-10,1%%xxa:~-8,2%%xxa:~-5,2%%xxa:~-2,2%

    rem кол-во десятков часов
    set xxc=%xxa:~-11,1%

    rem если десятков часов нет, то дописать в xxb впереди тройку
    rem иначе дописать впереди xxb кол-во десятков часов
    if -%xxc%==- (set xxb=3%xxb%) else set xxb=%xxc%%xxb%

    rem если число часов xxb = 0(формат времени с ведущ.0) -то дописать впереди 3
    if -%xxb:~0,1%==-0 set xxb=3%xxb%

    rem дни+месяцы+годы+время(xxb) — всё без разделителей
    set out1=%xxd:~0,2%%xxd:~3,2%%xxd:~6,4%%xxb%

    rem out1 без последней цифры
    set out2=%out1:~0,-1%

    rem последняя цифра out1
    set xxa=%out1:~-1%

    rem прибавить 2 к последней цифре out1
    set /a xxa+=2

    rem out2 + последний знак из xxa
    set out3=%out2%%xxa:~-1%

    set /a xxa-=1
    set out2=%out2%%xxa:~-1%

    rem создание временного файла и вывод в него

    rem получили три различных имени файла без точек
    set out1=~%out1%.tmpp1
    set out2=~%out2%.tmpp1
    set out3=~%out3%.tmpp1

    rem удаление старых временных файлов
    del %TEMP%\*.tmpp1

    rem вывод даты в лог
    date /t > %filelogname%

    :loop
    rem пауза в одну сек с небольшим, между основными пингами (-n 3 = 2сек и т.д.)
    ping -n 2 localhost > nul

    rem вывод результатов ОДНОГО пинга в файл out1
    ping %iptoping% -n 1 > %TEMP%\%out1%

    rem вывод текущего времени в файл out2 (с лишним «введите» «текущее» и т.п.)
    echo.|time > %TEMP%\%out2%

    rem вывод времени в out3 (чистый вид с миллисекундами)
    for /f «tokens=1,2,3» %%a in (%TEMP%\%out2%) do if -%%a==-Текущее (echo %%c > %TEMP%\%out3%)

    rem файл аут2 больше не нужен
    del /q %TEMP%\%out2%

    rem создадим переменную времени timedata вида 00:00:00 (отсекая миллисек.)
    for /f «tokens=1 delims=,» %%a in (%TEMP%\%out3%) do set timedata=%%a

    rem различный вывод при =1мс и превыш. интервала ожидания
    for /f «tokens=1,2,3,4,5,6,7» %%a in (%TEMP%\%out1%) do if -%%a==-Ответ (if -%%f==-время^<1мс (
    echo %%a %%b %%c %%d %%e время^^^ %TEMP%\%out3%
    ) else (echo %%a %%b %%c %%d %%e %%f %%g > %TEMP%\%out3%)
    )else if -%%a==-Превышен (echo %%a %%b %%c %%d %%e > %TEMP%\%out3%)

    rem создадим переменную пинга
    for /f «tokens=*» %%a in (%TEMP%\%out3%) do set pingdata=%%a

    rem запишем полученные данные в выходной файл, добавив метку времени
    echo %timedata% %pingdata% >> %filelogname%
    goto loop

    Ответить
    1. Nazario автор

      Большое спасибо за полезный комментарий

      Ответить
  14. Роман

    Интересно, интересно….

    Ответить
  15. Юрий

    Супер! Спасибо! Скажите пожалуйста а какие параметры в скрипте нужно поменять чтобы пинговать через каждые 10 минут и чтобы кол-во пингов было не менее 100 ?

    Ответить