使用Powershell中的“Where-Object”过滤输出

时间:2016-02-11 08:29:01

标签: powershell

我正试图进入PowerShell并遇到了我的第一个障碍。

当我跑

Get-Command | Where-Object CommandType -contains Cmdlet

我的输出被过滤,因此只显示包含“Cmdlet”的“CommandType”属性值的命令,如下所示:

enter image description here

对象“Source”可以做同样的事情:

Get-Command | Where-Object Source -contains appx

哪个让我:

enter image description here

但是当我尝试跑步时:

Get-Command | Where-Object Name -contains Add

我一无所获。 为什么我可以通过对象“CommandType”和“Source but not”Name来过滤输出?我肯定在这里遗漏了一些东西......

编辑:我知道我可以跑:

Get-Command -verb "get"

获得所需的输出。但我想弄清楚为什么我的“where-object”声明不起作用。

编辑2:

如果我使用“-match”比较运算符,它会起作用......

get-command | where-object Name -match "add"

但是“name”属性只是字符串吗? -match应该用于正则表达式比较afaik?我现在很困惑......

1 个答案:

答案 0 :(得分:14)

使用likematch运算符:

Get-Command | Where-Object Name -like Add*

这将匹配单词

中的任何位置
Get-Command | Where-Object Name -match Add

但更好的方法是:

Get-Command -verb Add

详细了解包含运算符here

- 包含       描述:遏制操作员。告知是否收集参考       值包括单个测试值。始终返回布尔值。返回TRUE       仅当测试值与至少一个参考值完全匹配时。

      PS C:\> "abc", "def" -Contains "def"
      True