Powershell – Monitoring a log file
I had a situation at work where I needed to monitor a log file for a particular entry. I needed to be notified when that entry appeared. This log file gets created anew, with the current date, every day. Here’s what I came up with:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | while($true) { # get the date $now = get-date # create the log name from said date eg :20231223Err.txt $fileName = '{0}{1}{2}Err.txt' -f $now.Year, $now.Month, $now.Day # network path to said log $fullPath = "\\path\e$\LogFiles\app\$($fileName)" #I don't need this to run in perpetuity - it's a temp situation - so I'm just #invoking this in a Powershell window and letting it rip. Write-Host "[$(Get-Date)] Starting job for file $fullPath" $latest = Start-Job -Arg $fullPath -ScriptBlock { param($file) # wait until the file exists, just in case while(-not (Test-Path $file)){ sleep -sec 10 } # matching the phrase Queue Count. could make all these variables Get-Content $file -wait | where {$_ -match 'Queue Count'} | foreach { Send-MailMessage -SmtpServer SMTPSERVER -From me@email.com -To me@email.com -Subject 'Queue Count' -Body $_ write-host $_ } } # wait until date change while($now.Date -eq (Get-Date).Date){ sleep -Sec 10 } # kill the job and start anew Write-Host "[$(Get-Date)] Stopping job for file $fullPath" $latest | Stop-Job } |