使用选择字符串管道过滤输出

JL *_*ret 6 powershell pipe powershell-5.0

在 bash 中,如果我执行以下操作,我将获得其中的所有环境变量wd

env | grep "wd"
Run Code Online (Sandbox Code Playgroud)

现在,在 Powershell 中,我知道我可以做到

get-childitem env:wd*
Run Code Online (Sandbox Code Playgroud)

但是我想通过管道将 select-string 作为一种更通用的方法,以便过滤来自管道的内容,无论管道左侧是什么。就像 grep 一样。

这不会过滤任何东西,我得到了所有的环境变量。

get-childitem env: | out-string | select-string -Pattern wd
Run Code Online (Sandbox Code Playgroud)

这让我一无所获:

get-childitem env: | select-string -Pattern "wd"
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用以下内容,如果我只过滤环境变量的名称,它实际上是一个更好的匹配。但是如果我想要一个快速而肮脏的过滤器呢?尤其是,不知道从管道进来的东西的属性。

get-childitem env: | where-object {$_.Name -like "wd*"}
Run Code Online (Sandbox Code Playgroud)

即是否有等效于grep的 Powershelll可在管道上下文中使用,而不仅仅是在文件搜索的上下文中,这select-string似乎覆盖得很好。

use*_*455 7

默认情况下Out-String生成包含所有输出的单个字符串对象,因此以下过滤器将选择或丢弃所有输出作为整体。您需要使用cmdlet 的-Stream参数Out-String为每个输出行生成单独的字符串对象。