我编写了以下脚本来查找 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
}
}
现在,我确信有更好的方法可以做到这一点,但这是适合您的基本逻辑。