通过单个和多个关键字进行Powershell搜索

时间:2014-10-30 09:44:31

标签: powershell powershell-v2.0 powershell-v3.0 powershell-ise

下面有一些命令在使用PowerShell查找Windows日志中的特定关键字时没有提供任何输出。

Get-WinEvent -FilterHashtable @{LogName="Application"} | Select-String "Information"

但是,如果我只运行Get-WinEvent -FilterHashtable @{LogName="Application"},则有许多带有Information关键字的条目。 Select-String -pattern "Information"也不起作用。

理想情况下,我想在上述方案中搜索多个关键字。

1 个答案:

答案 0 :(得分:2)

你需要这样做:

Get-WinEvent -FilterHashtable @{LogName="Application"} | ? { $_.leveldisplayname -eq 'Information' }

您正在寻找的Information是该对象的属性。 Get-WinEvent cmdlet返回一组对象,因此您需要添加Where-Object?来过滤LevelDisplayName对象属性。

回答你的新问题:

leveldisplayname将是信息,错误或警告。您可以添加其中任何一个或使用逻辑来组合它们。为了在邮件中搜索关键字,使用正则表达式可能是最好的方法:

Get-WinEvent -FilterHashtable @{LogName="Application"} | ? message -imatch "keyword1"

要搜索多个关键字,您可以使用OR |运算符修改正则表达式:

Get-WinEvent -FilterHashtable @{LogName="Application"} | ? message -imatch "keyword1|keyword2|foo|bar"

如果您要搜索包含" foo"的所有错误消息或" bar"你能做到的;

Get-WinEvent -FilterHashtable @{LogName="Application"} | ? { ($_.message -imatch "foo|bar") -and ($_.leveldisplayname -eq 'Error') }