【问题标题】:Filtering output using "Where-Object" in Powershell在 Powershell 中使用“Where-Object”过滤输出
【发布时间】:2016-05-21 22:16:36
【问题描述】:

我正在尝试使用 PowerShell,但遇到了我的第一个障碍。

当我跑步时

Get-Command | Where-Object CommandType -contains Cmdlet

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

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

Get-Command | Where-Object Source -contains appx

这让我很感动:

但是当我尝试运行时:

Get-Command | Where-Object Name -contains Add

我什么也得不到。 为什么我可以通过对象“CommandType”和“Source 但不是“Name”来过滤输出?我肯定在这里遗漏了一些东西......

编辑:我知道我可以跑:

Get-Command -verb "get"

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

编辑 2:

显然,如果我使用“-match”比较运算符,它就可以工作......

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

但“名称”属性不只是字符串吗? -match 应该用于正则表达式比较 afaik?我现在很迷茫……

【问题讨论】:

    标签: powershell


    【解决方案1】:

    使用likematch 运算符:

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

    这将匹配单词中的任何位置

    Get-Command | Where-Object Name -match Add
    

    但更好的方法是:

    Get-Command -verb Add
    

    阅读更多关于包含操作符here

    -包含 描述:收容操作员。判断是否是引用集合 values 包括单个测试值。总是返回一个布尔值。返回真 仅当测试值与至少一个参考值完全匹配时。

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

    【讨论】:

    • 哦,我现在明白了... -contains 仅在确切的值包含在一组对象中时才返回 true。我认为每个单独的对象都被解析为内联匹配。谢谢。
    • right...name 属性返回单个字符串,该字符串被传递到 where 并且必须完全等于被比较的字符串
    猜你喜欢
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多