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

The_Immortal 25-10-2013 11:59 2240823

Логгирование пинга с временной меткой
 
Друзья, подкиньте, пожалуйста, скриптик, который записывает время в формате hh:mm:ss (с интервалом в 10 сек) и указывает фразу (желательно такую же, как и в утилите ping), когда заданный хост НЕдоступен.

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



Спасибо!

UPD: нашел вот такой скрипт
Код:

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

' создаём объект:

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 = "ya.ru недоступен!"
  end if
end function

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

Переделал его следующим образом:
Код:

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

' создаём объект:
dim FSO: set FSO=CreateObject("Scripting.FileSystemObject")
dim file: set file =FSO.CreateTextFile("bad_ping.txt")
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
    file.WriteLine(FormatDateTime(Time(), vbLongTime) & "  " & "ya.ru недоступен!")
    GetHostStatus = "Inaccessible!.."
  end if
end function

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

В bad_ping.txt пишутся исключительно "плохие" пинги. Однако они задаются фразой "ya.ru недоступен!", а хотелось бы, чтобы туда попадало "Превышен интервал ожидания запроса" или "Заданный порт недоступен" и т.п. – именно те фразы, которые возвращает ping.
Такое возможно реализовать?

Denis-reut 03-03-2014 17:41 2318587

Добрый день.
Только сегодня увидел этот топик.
Предлагаю, возможно, более простое решение:

@ECHO OFF
@echo.
rem Пинг первого устройства (192.168.1.1)
date /T >D:\Diagnostic\%date%.txt
time /T >>D:\Diagnostic\%date%.txt
echo Устройство № 1 "IP-adress 192.168.1.1" >>D:\Diagnostic\%date%.txt
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

Далее пакетный файл добавляется в назначенное задание с необходимыми интервалами. Вместо фразы -ALARM!!!- пишите, что хотите :)
Вуаля.


Время: 10:49.

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