下面有一些命令在使用PowerShell查找Windows日志中的特定关键字时没有提供任何输出。
Get-WinEvent -FilterHashtable @{LogName="Application"} | Select-String "Information"
但是,如果我只运行Get-WinEvent -FilterHashtable @{LogName="Application"}
,则有许多带有Information关键字的条目。 Select-String -pattern "Information"
也不起作用。
理想情况下,我想在上述方案中搜索多个关键字。
答案 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') }