Powershell 查看日志并发送电子邮件通知
Posted
技术标签:
【中文标题】Powershell 查看日志并发送电子邮件通知【英文标题】:Powershell to look at log and send email notification 【发布时间】:2019-05-29 02:44:12 【问题描述】:脚本新手。我需要帮助创建一个 powershell 脚本,该脚本将查看日志文件并搜索关键字,例如失败/不成功,并且关键字存在,发送最后 50 行的电子邮件。
我已经完成了部分脚本,但我无法将它们组合在一起。
查看日志并打印出该行
$PATH="C:\tmp\test.log"
Get-Content $PATH -Tail 50 | Where-Object $_.Contains("fail")
发送到 SMTP 服务器的电子邮件已排序并正常工作
$From = "test@foobar.com"
$To = "test2@foobar.com"
$Subject = "Failed notification"
$Body = "This is what I want to say"
$SMTPServer = "smtp.foobar.com"
$SMTPPort = "25"
Send-MailMessage -From $From -to $To -Subject $Subject -Body $Body -SmtpServer $SMTPServer -port $SMTPPort
我知道我需要一个 IF 语句来比较内容并设置如果为真,则发送电子邮件。
有人可以帮我吗?
【问题讨论】:
快速问题:您当前的代码仅在文件的最后 50 行中查找单词“fail”,而忽略其余部分。这是你想要的吗? 是的,没错。 【参考方案1】:在您学习的过程中,如果您需要提醒自己会返回什么内容,那么明确表达可能会更容易。
[string] $PATH="C:\tmp\test.log"
[string[]] $failedRows = Get-Content $PATH -Tail 50 | Where-Object $_.Contains("fail")
# Email to SMTP server sorted and working
[string] $From = "test@foobar.com"
[string] $To = "test2@foobar.com"
[string] $Subject = "Failed notification"
[string] $Body = "This is what I want to say"
[string] $SMTPServer = "smtp.foobar.com"
[string] $SMTPPort = "25"
if( $failedRows -and $failedRows.Length -gt 0)
Send-MailMessage -From $From -to $To -Subject $Subject -Body $Body -SmtpServer $SMTPServer -port $SMTPPort
记住 powershell 是 weakly typed。像 vscode 这样的编辑器和 powershell extension 会有所帮助,并且您可以看到有关如何改进代码的建议。
$PATH="C:\tmp\test.log"
$failedRows = Get-Content $PATH -Tail 50 | Where-Object $_.Contains("fail")
# Email to SMTP server sorted and working
$From = "test@foobar.com"
$To = "test2@foobar.com"
$Subject = "Failed notification"
$Body = "This is what I want to say"
$SMTPServer = "smtp.foobar.com"
$SMTPPort = "25"
if( $failedRows -and $failedRows.Length -gt 0)
Send-MailMessage -From $From -to $To -Subject $Subject -Body $Body -SmtpServer $SMTPServer -port $SMTPPort
【讨论】:
以上是关于Powershell 查看日志并发送电子邮件通知的主要内容,如果未能解决你的问题,请参考以下文章
使用 PowerShell 通过电子邮件通知获取硬盘 SMART 数据
Powershell 脚本无法使用任务计划程序通过 Outlook 发送电子邮件