使用批处理脚本从记事本中读取时间戳

时间:2016-11-28 08:51:18

标签: powershell powershell-v3.0

我正在寻找以下问题的解决方案:

我们每天重新加载我们的应用程序,它将每天创建日志文件。 有时日志停止写入,因为一些与CPU使用和其他奇怪的东西有关的问题。 现在我们想要每隔5分钟监控一次日志文件,如果在日志文件中没有更新,那么它应该触发一封电子邮件。 当文件的重新加载顺利时,日志文件每1分钟更新一次。

我需要在日志文件中读取时间戳。日志文件有时间戳列,它将每隔5分钟在日志文件中写入内容。所以我需要每隔5分钟读取文件内的时间戳,如果有什么东西没有返回超过5分钟,那么我应该触发警报。

是否有任何方法可以使用批处理脚本或电源shell实现上述方案,或者欢迎监控日志文件的任何其他想法。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你肯定可以将Powershell用于此目的!

确保您已更改脚本的 Powershell执行政策。您可以这样更改:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

这是处理它的简单脚本。当然,它可以作为一个/两个衬里制作,但我试图让它更具可读性/可理解性:

$FilePath = 'C:\log.txt' #Log file location
$Minutes = 5 #LastWriteTime older than 5 minutes from current time.

#General email parameters
$SMTP = 'your.smtp.server.local'
$From = 'yourserviceaccount@contoso.com'
$To = 'someperson@contoso.com'
$Subject = 'Action Required'
$Body = 'Log file havent been written from more than {0} minutes!' -f $Minutes

$LastWriteTime = (Get-ItemProperty -LiteralPath $FilePath).LastWriteTime
if ($LastWriteTime -ge (Get-Date).AddMinutes(-$Minutes))
{
    Send-MailMessage -SmtpServer $SMTP -Port 25 -From $From -To $To -Subject $Subject -Body $Body -Priority High
}

然后,您可以制作一个计划任务,每隔N分钟触发一次脚本文件。