我是powershell的新手。今天我尝试了一些很简单的东西
Alias | sls -Pattern 'echo'产生了echo,但我想要的是Alias echo -> Write-Out。
在巴什,你可以
alias | grep 'echo'我的问题是为什么sls不能工作。顺便说一句,如果我用sls替换findstr,它就能工作了。
发布于 2013-09-01 12:50:22
如果您想获得具有特定名称的别名,可以这样做:
alias -name echoecho -> Write-Out是DisplayName
(alias -name echo).DisplayNameGet-Alias命令返回一个对象序列,每个对象表示一个命令别名。在powershell中显示时,这些对象被格式化为包含CommandType、Name和ModuleName属性的表。
当您进入findstr时,过滤的是这些列的字符串表示,因此任何匹配都会显示整个表行:
Alias echo -> Write-Output当您进入Select-String时,每个对象都被绑定到Select-String cmdlet的-InputObject参数。因为Select-String对文本进行操作,所以它只调用接收对象上的ToString来获取其字符串表示形式。
ToString只返回Name属性。您可以通过执行以下操作来看到这一点:
alias | %{$_.tostring()}因此,来自Select-String的任何匹配都只匹配别名。
发布于 2017-01-24 21:44:38
只有与文本文件一起使用时,select-string的行为才像grep。对于powershell对象,行为会发生变化(正如Lee在回答中所解释的)。
这可以通过以下几个方面来证明:
alias > out.txt; cat out.txt | sls -pattern 'echo'它返回Alias echo -> Write-Output,因为现在sls正在对文本文件进行操作。
做你想做的事情的其他解决方案是:
alias | where DisplayName -like '*echo*'alias | out-string -stream | sls -pattern 'echo'
这会将powershell对象转换为字符串,这样sls就可以像grep一样工作。https://stackoverflow.com/questions/18558502
复制相似问题