我写了一个脚本来检查日志中列在下面的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"
}