用于在一个日志文件中搜索新字符串出现的PowerShell逻辑

时间:2018-05-17 08:33:01

标签: powershell

早上好, 我正在搜索远程“实时”日志文件以查找字符串的出现,假设字符串是“无效数据”。如果找到此字符串,则表示发生了严重的系统问题。它每小时检查一次(但我会更频繁地更改)如果找到了字符串,我发送电子邮件提醒。那样就好。我正在使用PowerShell查找字符串没问题。

问题是,这个日志文件不是时间分片(并且不能),因此它的一个大文件在一天中增长(它在一天结束时成为日期),所以我想说字符串在08:00 - 很棒,发送电子邮件。问题是,一旦问题得到解决,日志文件中的那些字符串出现仍然存在并将保留在那里直到一天结束,所以我检查字符串是否在日志文件中的逻辑在/ if之后是有缺陷的它找到当天的第一次出现,因为它将继续找到字符串。

我无法想到如何纠正这个缺陷。我在考虑发生次数,但这次检查是在检查数百个远程设备,所以我很难看到如何利用它。

日志文件看起来像(例如):

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 :(得分:0)

你可以只运行一个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