none
【排错】脱机通讯簿的更新问题 RRS feed

  • 常规讨论

  • 症状:Outlook开启缓存模式时,新建的用户在全球通讯簿中查看不到,或已删除的用户依然出现在全球通讯簿中。

    排错步骤:这里为您分享在Exchange 2013及后续版本中常见的排错思路,并从客户端和服务器端两个角度进行分析。

    一.客户端: 

    当问题发生在客户端时,原因可能是本地OAB崩溃或者Outlook配置文件损坏。解决的思路如下:

    • 在Outlook客户端手动下载通讯簿。
    • 重置本地OAB的文件。
    • 重建Outlook配置文件。


    1.
    在Outlook客户端手动下载通讯簿:

    Outlook每隔24小时更新一次OAB,为了快速地获取最新的本地OAB副本,我们可以在Outlook客户端手动下载通讯簿。操作步骤如下:在标签栏下,点击发送/接收 -> 发送/接收组 -> 下载通讯簿

    2. 重置本地OAB的文件

    这些文件存储在如下路径:C:\Users\%username%\AppData\Local\Microsoft\Outlook\Offline Address Books

    在Offline Address Books文件夹后增加.old后缀,然后重新手动下载OAB。

    3. 重建Outlook配置文件

    如果上述方法都不生效,您还可以尝试新建一个Outlook配置文件,然后删除掉旧的配置文件。

    二.服务器端

    当问题发生在服务器端时,通常具有如下特点:

    • 多数用户收到影响:通常分布在同一个数据库,甚至所有用户。
    • 用户手动下载或重置OAB,重建配置文件均无效。


    这种情况下可以做如下检查:

    1. 确定问题用户所在的数据库,运行如下命令:

    Get-Mailbox <username> | fl name,data*


    比如问题账户中包括testuser02,他所在的数据库是DB01。

    2. 找到这个数据库对应的OAB,运行如下命令:

    Get-MailboxDatabase | fl name,off*


    如果返回的OfflineAddressBook为空值,表示当前数据库使用的是默认的OAB(步骤3 中IsDefault值为True)。

    3. 检查OAB的设置,运行命令:

    Get-OfflineAddressBook | fl Name,Vir*,*Distri*,Gen*,IsDefault



    找到发生问题OAB所对应的虚拟目录和生成OAB的仲裁邮箱(会在下文中介绍)。

    比如,OAB16A的虚拟目录为EXCH2016A\OAB (Default Web Site) 和 EXCH2016A\OAB (Exchange Back End),生成OAB的仲裁邮箱为OAB Mailbox。

    需要指出的是,当GlobalWebDistributionEnabled 设置为true时,OAB虚拟目录为空值。这种情况下,组织中的任意一台服务器都可能会处理OAB的下载请求。

    4. 检查OAB仲裁邮箱

    在步骤3中我们已经找到问题OAB所对应的仲裁邮箱,运行如下命令可以查看其对应的设置:

    Get-Mailbox -Arbitration | where {$_.PersistedCapabilities -like "*oab*"} | fl name, database

    比如,仲裁邮箱OAB Mailbox所在的数据库为DB01,  我们需要确保其正常挂载并且状态为Healthy,运行如下命令:

    Get-MailboxDatabaseCopyStatus "DBName"


    如果返回的结果中没有找到这个仲裁邮箱,我们可以进行如下操作:

    为这个仲裁邮箱开启OAB生成功能:

    Set-Mailbox -Arbitration “OAB Mailbox” -OABGen $true


    或者新建仲裁邮箱,并替换掉原来的OAB仲裁邮箱。运行如下命令:

    New-Mailbox -Arbitration -Name "New OAB Mailbox" -Database "<DBName>" -UserPrincipalName newoabmailbox@domain.com -DisplayName "New OAB Mailbox"
    Set-Mailbox -Arbitration -Identity newoabmailbox@domain.com -OABGen $true
    Set-OfflineAddressBook -Identity "<OABName>" -GeneratingMailbox "New OAB Mailbox"


    5. 强制生成OAB,并查看是否有事件ID17001和17002生成,运行命令:

    Get-OfflineAddressBook | Update-OfflineAddressBook


    接着打开事件查看器,检查是否有事件ID17001和17002生成:

    事件ID 17001记录的是生成OAB开始的事件,事件内容为:

    Generation of OAB "\默认脱机通讯簿" started.       
    Dn: CN=默认脱机通讯簿,CN=Offline Address Lists,CN=Address Lists Container,CN=contoso,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=contoso,DC=com
    ObjectGuid: xxx-xxx-xxx-xxx-xxx


    事件ID 17002记录的是生成OAB结束的事件,事件内容为:

    Generation of OAB "\默认脱机通讯簿" completed.       
    Dn: CN=默认脱机通讯簿,CN=Offline Address Lists,CN=Address Lists Container,CN=contoso,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=contoso,DC=com 
    ObjectGuid: xxx-xxx-xxx-xxx-xxx


    需要指出的是,生成17002事件不能代表OAB生成过程已经顺利完成,我们需要到系统目录中检查OAB文件是否正常更新。

    6. 检查OAB文件是否正常更新

    通常来说,在Exchange 2013及后续版本中, 生成的OAB文件会先存储在OAB仲裁邮箱中,之后被复制到%ExchangeInstallPath%\ClientAccess\OAB\<ObjectGuid>文件夹中。您可以到该路径下检查oab.xml文件的更新时间是否为最新。

    注:这里的ObjectGuid为事件17001和17002中记录的ObjectGuid。

    如果OAB文件不存在,或者更新时间不正确,您可以使用上文中提到的方法强制生成OAB,然后回到这个路径下重新观察。


    如果帖子有帮到您的话,请点击左上方“投票”按钮。这将帮助到阅读这个帖子的其他用户。

    2019年7月12日 3:00
    版主

全部回复

  • 7. 检查OAB虚拟目录的URL,运行如下命令:

    Get-OabVirtualDirectory | fl name, *URL*


    URL需要为可以访问的地址,它可以是http或https地址。如果是https地址,那么该地址中的域名空间需要包含在IIS证书中。

    8. 检查Autodiscover是否正常工作,以及返回的OAB URL是否正确

    打开Outlook -> 按住Ctrl键 -> 点击桌面任务栏右下角的Outlook图标 -> 点击测试电子邮件自动配置。


    输入问题账户的电子邮件地址 -> 选择使用自动发现 -> 点击测试 -> 检查Audiscover过程是否成功。如果成功,在返回的结果中检查OAB URL是否为:OAB虚拟目录里设置的URL/<ObjectGuid>。


    参考文档:

    https://techcommunity.microsoft.com/t5/Exchange-Team-Blog/OAB-in-Exchange-Server-2013/ba-p/598149
    https://techcommunity.microsoft.com/t5/Exchange-Team-Blog/Managing-OAB-in-Exchange-Server-2013/ba-p/596924

    关键词:通讯簿中看不到新用户,OAB生成失败,OAB更新失败,Outlook无法下载OAB。

    如果您遇到类似的问题且通过以上步骤仍未能解决,欢迎随时来我们论坛提问(点击文章页面左上角的“提出问题”按钮快速发帖)


    如果帖子有帮到您的话,请点击左上方“投票”按钮。这将帮助到阅读这个帖子的其他用户。

    2019年7月12日 3:00
    版主