Select-String -Quiet不返回True

时间:2016-08-22 21:31:28

标签: powershell netstat select-string

我的脚本应该获取VNC的TCP连接信息,并在连接状态为ESTABLISHED时告诉我。在使用True时,我一直试图获得Select-String -Quiet的返回值。

PS C:\> $vnc = netstat -ab | select-string "winvnc4.exe" -context 1,0
PS C:\> $vnc

    TCP    0.0.0.0:5800           User:0               LISTENING
>  [winvnc4.exe]
    TCP    0.0.0.0:5900           User:0               LISTENING
>  [winvnc4.exe]
    TCP    [::]:5800              User:0               LISTENING
>  [winvnc4.exe]
    TCP    [::]:5900              User:0               LISTENING
>  [winvnc4.exe]

PS C:\> $vnc | Select-String "LISTENING" -quiet

PS C:\> $vnc | Select-String -Pattern "LISTENING" -quiet

PS C:\> $vnc | Select-String "LISTENING" -simplematch -quiet

正如您所看到的,我尝试了几个不同的参数来获得结果,但没有返回任何内容。

1 个答案:

答案 0 :(得分:1)

您的第一个Select-String会生成MatchInfo个对象的列表。您之后的信息存储在这些信息的Context属性中。您需要先展开它,然后才能在其上运行另一个Select-String

$vnc | Select-Object -Expand Context |
    Select-Object -Expand PreContext |
    Select-String 'LISTENING' -SimpleMatch -Quiet

在PowerShell v3及更新版本上,您可以使用member enumeration使其更紧凑:

$vnc | ForEach-Object { $_.Context.PreContext } |
    Select-String 'LISTENING' -SimpleMatch -Quiet