Логика PowerShell для поиска новых вхождений строк в одном файле журнала - PullRequest
0 голосов
/ 17 мая 2018

Доброе утро, я ищу в удаленном «живом» файле журнала наличие строки, скажем, строка «Неверные данные».Если эта строка найдена, это означает, что имеет место серьезная системная проблема.Это проверка каждый час (но я буду менять это чаще). Если строка найдена, я отправляю уведомление по электронной почте.Это хорошо.Я использую PowerShell, чтобы найти строку без проблем.

Проблема в том, что этот файл журнала не разделен по времени (и не может быть), поэтому его один большой файл растет в течение дня (он становится датой, добавляемой в конце дня), поэтому давайтескажем, я нахожу строку в 08:00 - отлично, письмо отправлено.Проблема в том, что, как только проблема будет решена, эти вхождения строк в файле журнала все еще там и будут оставаться там до конца дня, поэтому моя логика для проверки, находится ли строка в файле журнала, является ошибочной после / еслион находит 1-е вхождение дня, так как он будет продолжать находить строку.

Не могу придумать, как исправить этот недостаток.Я думал о количестве вхождений, но эта проверка проверяет сотни удаленных устройств, поэтому я пытаюсь понять, как я могу это использовать.

Файл журнала выглядит (в качестве примера):

17-05-2018 09:22:52:391 (07144) .................. bla  bla bla

17-05-2018 09:22:52:391 (07144) .................. bla bla bla

17-05-2018 09:22:52:392 (07144) .................. 

17-05-2018 09:22:52:393 (07144) .................. bla bla

17-05-2018 09:22:52:393 (07144) .................. LoadFileInfo,  

17-05-2018 09:22:52:393 (07144) .................. Invalid Data <--- this being the error

Поэтому ищите какие-либо советы о том, как сделать мое предупреждение более актуальным.Тот факт, что дата и время находятся в левой части журнала, позволяет мне полагать, что это может быть возможно для манипулирования некоторой переменной, может быть, и если строка найдена больше, чем эта переменная, триггер?Но я новичок в PowerShell, поэтому любые указатели очень ценятся.

Спасибо за ваше время и благодарны за любые отзывы.

Приветствия

1 Ответ

0 голосов
/ 17 мая 2018

Можете ли вы просто запустить цикл while и проверить последнюю строку файла журнала, он застрянет в этом цикле, пока не будет выполнено совпадение, после чего он продолжится.

В зависимости от того, как быстро в журнал записываются строки, вы можете поиграть с Start-Sleep

while ((Get-Content -Path $LogFilePath -Tail 1 | Select-String -Pattern "Invalid Data" -SimpleMatch) -eq $null) 
{ 
    #Stuck in this loop until a match is made
    Start-Sleep 1 
}
#Send email and then loop back to the beginning
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...