Я пытаюсь отслеживать файл журнала с помощью Powershell, но я не могу определить, какое регулярное выражение следует использовать, чтобы получить требуемый вывод для мониторинга.
Get-Content $file -wait | where {$_ -match "some regex"} |
foreach { send_email($_) }
Вот пример моего файла журнала.
19:43:06.5230 Info {"message":"YourCode_Prod execution started","level":"Information","timeStamp":"2019-01-15T19:43:06.5132404+00:00","fingerprint":"588aeb19-76e5-415a-88ff-a69797eb414f","windowsIdentity":"AD\\gaurav.m","machineName":"EDEV-3","processName":"YourCode_Prod","processVersion":"1.0.6800.16654","fileName":"YourCode_Work","jobId":"22a537ae-35e6-4abd-a57d-9dd0c273e81a","robotName":"Gaurav"}
19:50:48.8014 Info {"message":"YourCode_Prod execution ended","level":"Information","timeStamp":"2019-01-15T19:50:48.8005228+00:00","fingerprint":"b12b7d6f-cf3a-4e24-b1e6-1cf4413c12e2","windowsIdentity":"AD\\gaurav.m","machineName":"EDEV-3","processName":"YourCode_Prod","processVersion":"1.0.6800.16654","fileName":"YourCode_Work","jobId":"22a537ae-35e6-4abd-a57d-9dd0c273e81a","robotName":"Gaurav","totalExecutionTimeInSeconds":462,"totalExecutionTime":"00:07:42"}
Я попытался сгенерировать регулярное выражение, но не смог найти правильную логику для этого.
$searchpattern = [regex]"(?:(?:started))|(?:(?:ended))"
Get-Content -Path C:\Execution.log | foreach {
if ($PSItem -match $searchpattern) {
# does the entry have a valid date/time
$time, $type, $data = $PSItem -split " ", 3
$time
$type
$data
}
}
Мне нужно отслеживать этот файл, который будет иметь много строк, но я хочу предпринять действия только для «выполнение началось» и «выполнение закончено».
Я мог бы разделить тип времени сообщения и данные,Но мне нужно продолжить детализацию данных.
Этот сценарий будет запускаться каждые 5 минут, поэтому я буду сравнивать время -5 минут и начну читать оттуда журнал, как только я обнаружу, что он закончен или запущен, я будупринять необходимые меры.