用于提取已禁用 Active Directory 帐户的用户邮箱列表的脚本

用于提取已禁用 Active Directory 帐户的用户邮箱列表的脚本

我有一个流程,当 Active Directory 用户帐户终止时,我们会通过该流程禁用它们。Exchange 2007 邮箱被保留,转发设置为用户管理器。我需要定期运行一个脚本,该脚本将提取当前活动邮箱的列表,其中相应的 AD 帐户被禁用。我没有编写任何类型脚本的经验,但我相信根据我读过的其他内容可以做到这一点。我进行了一些搜索,但一无所获,没有找到这个特定要求。谢谢。

服务器 2003R2、Exchange 2007、AD

要明确的是,我并不是要求任何人为我写这篇文章,只是要求一些链接可能推动我朝着正确的方向前进。

答案1

您可以通过 PHP 等语言使用标准 LDAP 调用,也可以使用 Microsoft 产品中的 AD 特定调用(例如,带有 DirectoryServices 库的 C#)。我没有 Exchange,所以我不知道邮箱的原始属性是什么,但要查看帐户是否被禁用,您可以检查每个用户的“userAccountControl”属性,然后解释数字标志以查看帐户是否被禁用(标志列表可以在此处看到:http://support.microsoft.com/kb/305144

该脚本的基本流程如下:

  1. 使用 LDAP(PHP、perl 等)或 DirectoryService(Visual Basic、C#)绑定到 Active Directory。

  2. 搜索所有已禁用的用户对象(十六进制中 SamAccountType 为 30000000 的对象)(十六进制 userAccountControl 值在整数形式中包含“2”的对象)

  3. 循环遍历结果对象并进行调用以确定哪些对象具有活动的邮箱(再次,我不使用 Exchange,因此这里我没有好的答案)。

  4. 每次在#3 中获得结果时,打印出或写入文件一些适当的属性(sAMAccountName、dn 和 cn 是很好的起点),并附上整个报告的日期戳。

答案2

应该有一个工具安装在你的交换称为低密度脂蛋白。使用此工具,您可以导入或导出活动目录。如果您需要一个包含所有已禁用用户帐户的文件,只需打开命令行并输入:

LDIFDE -u -f myexport.ldif -r “(&(objectCategory=person)(userAccountControl=514))”

如果导出的数据有点太多,您可以使用各种参数进行限制。如果您只想要已禁用帐户的名称,请尝试

LDIFDE -u -f myexport.ldif -r “(&(objectCategory=person)(userAccountControl=514))” -l “dn”

谨致问候,菲尔。

答案3

这应该有帮助:http://msexchangetips.blogspot.com/2007/06/exchange-find-disabled-accounts-with.html

我确信有一种方法可以使用 PowerShell 来执行此操作,但我目前手头没有 Exchange 服务器......

答案4

为了分享我最终使用的解决方案,我想详细说明我在每个人的回答中留下的评论。

我决定在员工被解雇时开始使用“从 Exchange 地址列表中隐藏”属性。

因此,我使用 LDIFDE 并结合 Phil 提供的信息和 Massimo 的链接,如下所示。

LDIFDE -f c:\disabledusersmailbox.txt -r "(&(UserAccountControl=514)(objectClass=User)(msExchHideFromAddressLists=TRUE))" -l "dn"

相关内容