Powershell脚本获取事件日志,如果消息包含字符串发送电子邮件

时间:2016-03-31 21:41:48

标签: powershell

我仍然非常喜欢PS,而且我仍然坚持使用脚本。最终目标是在具有特定ID(在这种情况下为2)的某个源中记录应用程序日志中的事件并且事件中的消息包含特定字符串时发送电子邮件。我没有循环工作,直到我意识到创建这些事件的源有时会在完全相同的时间转储4或5个事件,所有事件都具有相同的ID,因为我的旧脚本只查看最新事件,它不会#39 ;如果事件不是记录在同时转储的4或5个事件中的最后一个事件,则找到它。所以现在计划是在记录事件id 2时拉出最后10个id 2事件,并通过它们解析所需的字符串。而这一切都在为我打破。到目前为止,我有一个测试:

    $eventLogs = Get-EventLog -LogName Application -Source "<source>" -InstanceId 2 -Newest 100 -EntryType Error
    $eventLogs | ForEach-Object Message
    if (Message -contains "<string>")
    {
     Write-Host "Found One"
    }

我也试过这个:

    $eventLogs = Get-EventLog -LogName Application -Source "<source>" -InstanceId 2 -Newest 100 -EntryType Error | ForEach-Object Message
    foreach ($event in $eventLogs)
    {
    if(($eventLogs) -contains "<string>")
     {
      write-host "found one"
     }
    }

一切都无济于事。有人能帮我看看我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

查看powershell的Where-Object,您应该能够在命令之后添加类似这样的内容,而无需将它们分配到列表中:

 | Where-Object {$_.Message -like "<string>"}

Powershell将从Get-EventLog迭代结果吐出,并根据你可以抛出的属性过滤它们。