我花了今天早上大部分时间来解决这个问题,所以我想分享一下,以防其他人和我遇到同样的问题。
我们目前处于 Exchange 2003/Exchange 2010 共存期。我们的 Exchange 2010 服务器上有少量测试邮箱,其余邮箱位于 Exchange 2003 上,我们的脱机通讯簿生成服务器目前是 Exchange 2003 服务器。
昨天有人离开了公司,所以我们按照正常程序,将他们从所有 Exchange 地址列表中隐藏起来,并等待一夜,等待脱机通讯簿重建。当我今天回来时,有问题的用户仍然列在我们的脱机通讯簿中。作为参考,该用户的邮箱位于 Exchange 2003 服务器上。
我检查了 Exchange 2003 服务器上的事件日志,在 OAB 生成过程中,Microsoft Exchange System Attendant 服务在凌晨没有记录任何警告或错误。我以为这只是一个侥幸,于是手动重建了脱机通讯簿,结果相同(没有警告/错误,用户仍在脱机通讯簿中)。
Outlook 中没有同步错误,并且我已经验证(使用 Exchange 2003 服务器上的 Exchange 系统管理器)脱机通讯簿确实存在,并且仍然在每天凌晨创建,以及当我今天早上手动重建它时。
答案1
调查这个问题需要我使用一些 Active Directory 知识,以及一些 Exchange-2010-Management-Shell-fu。
我首先检查的是 2 个域控制器是否正确复制。我最初的想法是,当我更新在 Exchange 地址列表中隐藏我已经在一个域控制器上更改了此复选框,但该域控制器并未复制到脱机通讯簿生成过程恰好选择的另一个域控制器。事实证明,域控制器是正确复制,这不是问题。
接下来要做的是检查一些 Active Directory 属性及其当前值。我首选的用于使用 Active Directory 执行低级操作的工具是广告探索者来自 Sysinternals,但是如果您愿意的话,ADSI Edit 也可以做得同样好。
我关注的用户第一个属性是msExchHideFromAddressLists属性。这应该是错误的如果用户应该出现在地址列表中,并且真的如果他们不应该。这实际上只是一个感觉检查,因为它是 Active Directory 用户和计算机在您(取消)勾选时更新的内容在 Exchange 地址列表中隐藏复选框。这正确显示真的。
下一个要检查的属性是显示地址簿。这是一个多值属性,包含此用户应出现的所有地址列表。通常,这应该至少包含一个用户应出现的地址列表,但对于拥有msExchHideFromAddressLists属性设置为真的此属性根本不应该设置。这是最大的线索,因为此用户仍然具有此属性中的值,而这些值在在 Exchange 地址列表中隐藏复选框已被选中。
Exchange 2003 服务器上的收件人更新服务负责更新显示地址簿属性 (等等),因此我确定由于某种原因,收件人更新服务在这里出现故障。
当我最初安装 Exchange 2010 时,我必须运行setup.com /PrepareLegacyExchangePermissions
以授予收件人更新服务其所需的一些权限,因为 Exchange 2010 会稍微移动一些内容。
为了检查权限,我打开了 Active Directory 用户和计算机并选择查看 => 高级功能使我能够查看 Active Directory 中用户帐户的安全属性。然后我打开有问题的用户并检查安全选项卡,并将其与应包含在脱机通讯簿中的另一个用户进行比较。虽然我没有检查每个权限,但很明显,应该包含在脱机通讯簿中的用户有许多比刚刚离开的用户授予了更多的权限。检查其他几个用户,他们也比违规用户获得了更多的权限。
我偶然发现,违规用户没有从父对象继承权限,而我检查的所有其他用户都继承了权限。根据我的经验,这种情况通常只发生在用户是(或曾经是)某个组织的成员时。Active Directory 特权组。在确认他们不再是特权组的成员后,我回到 ADExplorer 并更改了管理员数量将此用户归因于0从 1 开始。然后我返回到 Active Directory 用户和计算机并启用此用户配置文件以从父对象继承权限。
完成此操作后,我进入用户属性并取消选中在 Exchange 地址列表中隐藏复选框,然后再次选中。我等了几分钟,让收件人更新服务完成工作,果然 5 分钟后,当我在 ADExplorer 中查看用户对象时,收件人更新服务已经删除了显示地址簿之前没有权限执行的属性。快速手动重建脱机通讯簿,每个人都很高兴。