我正在尝试格式化在服务器上搜索特定字符串的事件日志的命令,但我希望它搜索严重,警告和错误日志条目。
现在,我只知道如何让它搜索一种错误类型或另一种,例如:
Get-EventLog -LogName Application -EntryType Error -Message *STRING* -Newest 5 |
Format-List
以下内容不起作用,但与我正在尝试的方法相符:
Get-EventLog -LogName Application |
Where {$_.EntryType Error -or $_.EntryType Warning -or $_.EntryType Crital} -and -Message *STRING* -Newest 5 |
Format-List
这不起作用,并且不熟悉Powershell我不太确定我应该如何格式化这个命令。其他OR语句我发现了使用IF的例子,但我不明白为什么我需要一个IF语句。
答案 0 :(得分:2)
有多种语法错误。
Get-EventLog -LogName Application | ? {$_.EntryType -eq "Error" -or $_.EntryType -q "Warning" -or $_.EntryType -eq "Crital" } | select -First 5 | fl
那么改变了什么?大多数情况下,你错过了下划线和评估运营商,
$.EntryType Error
- > $_.EntryType -eq "Error"
。此外,通过使用-Newest 5
,您只读取事件日志中的前5个条目,无论它们是否与过滤器匹配。通过使用select -First 5
,可以选择五个首先匹配。
如果要包含带有消息字符串的过滤,请使用一些括号添加它,
Get-EventLog -LogName Application | ? { ($_.EntryType -eq "Error" -or $_.EntryType -q "Warning" -or $_.EntryType -eq "Crital") -and $_.Message -like "SEARCHTERM" | select -First 5 | fl
答案 1 :(得分:2)
您不需要(也不应该)使用where-object
来过滤此内容。 Get-EventLog
上的EntryType
参数采用值的数组,因此您可以将多个条目类型传递给该cmdlet并在那里进行过滤。尽可能靠近信号源进行过滤,以获得内存和信息。性能原因(特别是通过网络连接)。
Get-EventLog -LogName Application -EntryType Error,Critical,Warning -Message *STRING* -erroraction silentlycontinue -Newest 5 | Format-List
我必须添加-erroraction silentlycontinue
因为如果没有一个或多个类型的条目,它将引发错误。您还可以使用try/catch
来捕获错误。