【问题标题】:PowerShell + Exchange Online - Using Where-Object to filter one object against different object?PowerShell + Exchange Online - 使用 Where-Object 针对不同对象过滤一个对象?
【发布时间】:2020-09-29 21:10:59
【问题描述】:

真的把我的头发拉到这个上。我有点初学者所以提前道歉。

我在使用 Where-Object cmdlet 从 Exchange Online 中的 Get-Group 查询中删除外部联系人时遇到问题。

group@domain.com 包含 4 个成员 - InternalUser1, InternalUser2, ExternalUser1, ExternalUser2

这是我目前所拥有的,我尝试了许多不同的比较器(-notmatch、-notlike、-ne 等),但均无济于事:

输入

$x = Get-Contact | Select-Object -ExpandProperty Identity
$y = Get-Group -Identity "group@domain.com" | Select-Object -ExpandProperty Members | Where-Object {$_ -notcontains $x}

输出

$x
ExternalUser1
ExternalUser2

$y
ExternalUser1
ExternalUser2
InternalUser1
InternalUser2

期望的输出

$y
InternalUser1
InternalUser2

不包括 Where-Object 部分,输出是正确的,所以问题一定出在我对 Where-Object cmdlet 的使用上。对此的任何帮助将不胜感激!

【问题讨论】:

  • 你试过-notmatch而不是-notcontains吗? (后者用于检查数组中的元素,Where-Object 使用 $_ 这是单个成员的 DistinguishedName)
  • 嗨 Theo,是的,正如帖子中提到的,我尝试过 -notmatch、-notcontains、-notlike、-ne 但 nada! :(

标签: powershell office365 exchange-server


【解决方案1】:

假设您的扩展变量包含一个字符串列表,以下工作。

 $y | Where-object {$_ -notin $x}

应用于您的示例

$x = Get-Contact | Select-Object -ExpandProperty Identity
$y = Get-Group -Identity "group@domain.com" | Select-Object -ExpandProperty Members | Where-Object {$_ -notin $x}

完整的可重现的独立示例。

$x = @(
'ExternalUser1',
'ExternalUser2'
)

$y = @(
'ExternalUser1',
'ExternalUser2',
'InternalUser1',
'InternalUser2'
)

$y | Where-object {$_ -notin $x}

如果这不起作用,请执行:

$x[0].GetType()
$Y[0].GetType()

如果 Member 或 Identity 是一个复杂对象而不是字符串,您可能需要在使用 -notin 之前从那里获取实际的字符串值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 2021-08-01
    • 2022-09-27
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2016-12-04
    相关资源
    最近更新 更多