首页 > 解决方案 > 在变量属性上过滤 Where-Object

问题描述

阅读以下答案:(基于变量内容的对象),(使用字符串数组在 PowerShell 中的 Where-Object 中进行比较

$allgroups
DisplayName
--------
Group1
Group2
Group3

$mailgroups
DisplayName
--------
Group1
Group3

$newgroup = $allgroups | ? ($_.DisplayName -notin $mailgroups)
$newgroup = $allgroups | ? ($_.DisplayName -notin ($mailgroups | Select DisplayName))

$newgroup should = "DisplayName: Group2",以上命令返回 null。尝试过其他运营商:

-ne, -cnotin, -eq, -notcontains

标签: powershell

解决方案


您的语法错误:

$newgroup = $allgroups | ? DisplayName -notin $mailgroups.DisplayName

或者如果你想保持你的方式:

$newgroup = $allgroups | Where-Object { $PSItem.DisplayName -notin $mailgroups.DisplayName }

或者,对于 v2:

$newgroup = $allgroups | Where-Object {
    ($mailgroups | Select-Object -ExpandProperty DisplayName) -notcontains $_.DisplayName
}

脚注:$PSItem$_是一样的;$PSItem在 v3 中引入。此外,?是 的默认别名Where-Object


推荐阅读