获取邮件不为空的Ad用户

6

我正在尝试获取AD中所有具有电子邮件(mail属性)的用户列表。我有这个命令

Get-AdUser -filter * -Properties mail | Select SAMAccountName, mail | Export-CSV -Path $userPath -NoTypeInformation

问题在于我不知道如何限制或过滤掉电子邮件为空/空白的用户。我不关心脚本有多复杂,因为它将成为一个更大的PowerShell脚本的一部分。如果解决方案是循环遍历CSV,那么这是一个选择,但我更希望有更快的方法。有人知道如何做到这一点吗?

3个回答

16

试试这个:

Get-ADUser -Properties mail -Filter {mail -like '*'}

这个语句返回了所有没有电子邮件的用户。我将其替换为“-like”,然后它就起作用了。谢谢! - Grady D
我将其与其他答案进行了比较,在拥有10,000个用户的域中,这大约快了0.5秒。当涉及更大的域时,这些时间会累加。 - Grady D
2
尽可能在早期进行过滤。 - mjolinor

6

试试这个:

Get-ADUser -Properties mail | where {$_.mail -ne $null} | Select SAMAccountName, mail | Export-CSV -Path $userPath -NoTypeInformation

我不得不添加-filter *,因为这是一个必需的属性,但这样做起作用了。谢谢! - Grady D
虽然这是一个技术上有效的答案,但在应用过滤器之前,您将从目录中检索所有对象-这是最低效的方法。 mjolinor提供的答案是处理此任务的更好方法。 - Dscoduc

1
这个问题已经有了答案,但对我来说,最简单的方法是依靠LDAP过滤器语法。例如:
 Get-ADUser -LDAPFilter "(mail=*)"

"=*"是标准的LDAP运算符:
*(通配符) 您可以使用通配符运算符来表示一个值,该值可以等于任何内容。这种情况可能是您想要查找具有标题值的所有对象时。您将使用以下内容: (title=*)。
来源 LDAP查询基础知识

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接