wd
在 bash 中,如果我执行以下操作,我将获得其中的所有环境变量。
env | grep "wd"
现在,在 Powershell 中,我知道我可以这样做
get-childitem env:wd*
但是我想将管道连接到 select-string 作为一种更通用的方法,以便过滤从管道传入的内容,而不管管道左侧是什么。就像 grep 一样。
这不会过滤任何东西,我得到了所有环境变量。
get-childitem env: | out-string | select-string -Pattern wd
但这并没有给我带来任何好处:
get-childitem env: | select-string -Pattern "wd"
我知道我可以使用下面的方法,而且如果我只过滤环境变量的名称,它实际上会更匹配。但如果我想要一个快速而粗糙的过滤器,比如 grep,该怎么办?尤其是,不知道从管道传入的内容的属性。
get-childitem env: | where-object {$_.Name -like "wd*"}
即是否有相当于grep可用于管道上下文,而不仅仅是文件搜索,select-string
似乎覆盖得很好。
答案1
默认情况下,Out-String
生成单个字符串对象,其中包含所有输出,因此以下过滤器将选择或丢弃所有输出。您需要使用cmdlet-Stream
的参数Out-String
为每行输出生成单独的字符串对象。
答案2
答案相同,作为函数和别名,可以将其包含在 powershell 配置文件中:
function Find-Env-Variable (
[Parameter(Mandatory = $true, Position=0)]
[String]$Pattern){
get-childitem ENV: | Out-String -Stream | select-string -Pattern "$Pattern"
}
Set-Alias findenv Find-Env-Variable