如何使用“|”在powershell输出中grep字符串?

问题描述

好像是在 powershell 中,

echo ASDF | Select-String ASDF

输出明显的字符串,ASDF

但是,如果我尝试查看 WinEvents 并寻找输出,即

Get-WinEvent -ListLog * | Select-String antrea

好像原始文本没有被扫描。

像使用标准 unix Grep 一样使用 Select-STring 的正确方法是什么?

enter image description here

解决方法

PowerShell 中的管道与 UNIX 风格的 shell 略有不同 - PowerShell 传递原始 .NET 对象引用,而不是将字符串输出从一个命令传递到下一个命令。

因此,您需要检查 Get-WinEvent 返回的对象的 属性 - 此处使用 Where-Object cmdlet:

Get-WinEvent -ListLog * |Where-Object LogName -Match SSH

如果要检查特定对象上的哪些属性可用,请使用 Get-Member cmdlet:

PS ~> Get-WinEvent -ListLog * |Get-Member -MemberType Property

   TypeName: System.Diagnostics.Eventing.Reader.EventLogConfiguration

Name                           MemberType Definition
----                           ---------- ----------
IsClassicLog                   Property   bool IsClassicLog {get;}
IsEnabled                      Property   bool IsEnabled {get;set;}
LogFilePath                    Property   string LogFilePath {get;set;}
LogIsolation                   Property   System.Diagnostics.Eventing.Reader.EventLogIsolation LogIsolation {get;}
LogMode                        Property   System.Diagnostics.Eventing.Reader.EventLogMode LogMode {get;set;}
LogName                        Property   string LogName {get;}
LogType                        Property   System.Diagnostics.Eventing.Reader.EventLogType LogType {get;}
MaximumSizeInBytes             Property   long MaximumSizeInBytes {get;set;}
OwningProviderName             Property   string OwningProviderName {get;}
ProviderBufferSize             Property   System.Nullable[int] ProviderBufferSize {get;}
ProviderControlGuid            Property   System.Nullable[guid] ProviderControlGuid {get;}
ProviderKeywords               Property   System.Nullable[long] ProviderKeywords {get;set;}
ProviderLatency                Property   System.Nullable[int] ProviderLatency {get;}
ProviderLevel                  Property   System.Nullable[int] ProviderLevel {get;set;}
ProviderMaximumNumberOfBuffers Property   System.Nullable[int] ProviderMaximumNumberOfBuffers {get;}
ProviderMinimumNumberOfBuffers Property   System.Nullable[int] ProviderMinimumNumberOfBuffers {get;}
ProviderNames                  Property   System.Collections.Generic.IEnumerable[string] ProviderNames {get;}
SecurityDescriptor             Property   string SecurityDescriptor {get;set;}