定期检查日志中是否有错误,但会阻止发送重复通知

时间:2018-09-17 15:23:37

标签: powershell

我写了一个脚本来检查日志中列在下面的strings[$string],并发送一个带有相关日志附件的邮件(如果其中一种模式与该日志匹配)。

此脚本按预期工作,但是我现在面临的挑战是检查如何排除已经发出警报的字符串。例如:

根据呼叫流量,我的日志文件每4分钟或比4分钟更快地覆盖一次。由于我的脚本每3分钟运行一次,有时我会收到无数关于相同错误的警报邮件。

那么,在向我发送邮件之前,如何检查该错误是新错误还是已经发出警报?我是Powershell脚本的新手。预先感谢!

脚本:

$string='(Unable to connect to the remote server|A serious|Socket error - cannot connect|Fetch returned HTTP error|"Open error|URL=http")'
$path1="D:\Program Files\AVP\*.txt"
$Target = "D:\Program Files\AVP\Avp_Logs.zip"

if (Select-String -Path $path1 -pattern $string)
{
    set-alias sz "C:\Program Files\7-Zip\7z.exe"
    $count=(Select-String -Path $path1 -pattern $string).length
    $string1=Select-String -Path $path1 -pattern $string
    sz a  $Target $Source -ssw ;
    $body1=("The Error:-"+$string+": "+"Error Count"+" "+$count+"::")
    $string1 | ConvertTo-Html  | Out-File 'E:\PowershellScripts\test.html'
    $body=""
    $body=$body1+$body2
    Send-MailMessage -From "alert@domain.com" -To user@domain.com-Attachments $Target -Subject "A Seriuos Error on server1,please check" $body -BodyAsHtml  -SmtpServer domain.com
}
else
{
    write-host "nothing to process"
}

0 个答案:

没有答案