2013-12-17 106 views
0

我试图格式化一个命令,该命令在服务器上搜索事件日志中的某个特定字符串,但我希望它搜索严重,警告和错误日志条目。在没有if语句的情况下在Powershell中使用OR?

现在,我只知道如何使搜索一个错误类型或其他的,比如像这样:

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语句。

回答

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 
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来捕获错误。

+0

啊谢谢你!我也是不正确的没有关键类型或错误(导致命令运行错误),所以最后的命令很好运行: Get-EventLog -LogName应用程序-EntryType错误,警告-Message * STRING *默默地继续运行 - Newest 5 |格式列表 – vnat

相关问题