用于查找没有特定别名条目的用户的脚本 - 不起作用

用于查找没有特定别名条目的用户的脚本 - 不起作用

我编写了以下脚本来查找 Exchange 帐户中没有特定别名条目的用户,但它返回 OU 中的所有用户。有人可以帮忙吗?谢谢

获取收件人 –OrganizationalUnit “OU 名称” | 其中 {$_.emailaddresses -notlike '*@abc.com'} | 选择名称,SamAccountName

答案1

这里的问题是 EmailAddresses 属性是收件人所有别名的集合。如果你这样做Get-Help about_Comparison_Operators,你会看到

当输入是值的集合时,比较运算符将返回任何匹配的值。

因此,您的 Where-Object 调用将返回具有至少 1电子邮件别名与您指定的字符串不匹配。因此,您获得的 Where-Object 语法将仅过滤掉那些只有 1 个别名(即与过滤器中的字符串匹配的别名)的收件人。

如果您的别名遵循命名方案/策略,您可能希望与-NotContains操作员合作。这看起来像这样:

Get-Recipient | ? {$_.EmailAddresses -notcontains "smtp:$($_.samaccountname)@abc.com"} | 
select samaccountname, emailaddresses | sort samaccountname

当然,您需要改变字符串以匹配您想要排除的预期别名。

编辑:如果你没有命名方案,正如你所说,那么我能想到的最好的方案如下:

foreach ($recipient in (Get-Recipient)) {
    if ($recipient.EmailAddresses | ? {$_ -like "*abc.com"}) {
        #do nothing
    } else {
        $recipient
    }
}

现在,我确信有更好的方法可以做到这一点,但这是适合您的基本逻辑。

相关内容