Exchange中的脱机通讯录(Offline Address Book / OAB)是一个很有用的功能,用户可以在脱机通讯录上查询到大量有用信息。而且,由于是“脱机”的,当客户端没有连接到Exchange服务器时,依然可以使用。
需要注意一点,脱机通讯录仅供Outlook客户端使用Exchange方式连接(MAPI/Outlook Anywhere),并且启用了缓存模式(Cache Mode)的情况下使用,其它任何类型的客户端都是不会用到脱机通讯录功能的。
脱机通讯录在配置和使用过程中,主要有三个阶段:
生成(邮箱服务器)=>发布(客户端访问服务器)=>下载(Outlook客户端)
由于从Exchange Server 2007开始,Microsoft开始逐渐淡化公用文件夹(Public Folder)功能,因此本文中不再讨论通过公用文件夹发布脱机通讯录。
生成脱机通讯录
那么,脱机通讯录是如何产生的呢?
这里需要先明确Exchange Server中的地址列表(Address List及Global Address List)和脱机地址簿(Offline Address Book)两个概念。
如前所述,脱机地址簿是“脱机”数据,客户端下载了脱机地址簿,对它的查询操作都是由客户端本地完成,不占用服务器资源;而地址列表则是“在线”数据,每一次客户端使用地址列表,都会向活动目录提交查询,并且获取实时的返回信息。可以看到,脱机地址簿对于节省服务器开销是很有帮助的,特别是企业规模较大,而用户习惯使用通讯录来查询收件人信息的时候。另外,脱机地址簿仅供Outlook客户端使用;地址列表会除了Outlook可以访问外,OWA的用户总会利用地址列表进行检索。
脱机通讯录与地址列表之间的关系是使用者与被使用者的关系。脱机通讯录中包含一个或多个地址列表,Exchange服务器根据地址列表的查询结果来产生脱机通讯录。默认情况下,脱机通讯录中会包含默认全局地址列表(Default Global Address List),管理员可以根据需要进行修改。例如下图,管理员在这个脱机通讯录中,除了包含默认全局地址列表外,还包含了其它3个地址列表。
在一个脱机通讯录中放置多个地址列表,当客户端连接并希望下载脱机通讯录时,就可以选择需要下载哪个部分,例如上图中的脱机通讯录,客户端连接时,就能够有如下的选择:
Exchange邮箱服务器创建好脱机通讯录之后,会把脱机通讯录的信息放到Exchange安装路径的ExchangeOAB子目录下,每一个脱机通讯录会在该目录下再创建出一个以GUID值命名的子文件夹,数据放在该子文件夹中。ExchangeOAB是一个共享文件夹,所有Exchange服务器对它都有读取权限。
发布脱机通讯录
脱机通讯录由Exchange邮箱服务器创建完成后,将通过Exchange客户端访问服务器发布。管理员可以指定需要发布脱机通讯录的客户端访问服务器名称。例如下图所示,这个脱机通讯录将被发布到3台Exchange客户端访问服务器上。
Exchange客户端访问服务器上,有一个名为Microsoft Exchange File Distribution的服务,这个服务将从前面所提到的ExchangeOAB共享文件夹中,获取需要在本机发布的脱机通讯录数据,并复制到客户端访问服务器本地,具体的位置是Exchange安装路径的ClientAccess\OAB子目录。而OAB是发布到IIS中作为虚拟目录存在的,这样客户端Outlook就可以通过访问IIS来获取脱机通讯录了。例如下图所示,这台客户端访问服务器上,总共发布了3个脱机通讯录。
IIS中看到的虚拟目录情况:
在Outlook客户端使用脱机通讯录
从Exchange服务器端实现脱机通讯录的创建和发布之后,就可以从Outlook客户端下载并使用了。
首先,在配置Outlook帐号时,检查缓存模式是否被启用。
然后,打开通讯录,在通讯录栏目上右击,选择弹出菜单中的Property,检查当前客户端使用的通讯录位置。
如果客户端已经下载了脱机通讯录,会看到以下界面。
如果还没有下载脱机通讯录,界面中将会显示当前连接的Exchange Server 2010客户端访问服务器名称。
要检查Outlook具体是连接到哪台服务器上获取脱机通讯录,我们可以使用自动发现功能进行测试。
在Outlook运行时,系统托盘区会有一个Outlook图标,按住Ctrl键并用鼠标点击该图标,菜单栏中会出现两个额外的菜单(对比没有按住Ctrl键时),即:Connection Status和Test E-mail AutoConfiguration。
选择Test E-mail AutoConfiguration,输入密码后进行测试,可以获取Exchange服务器上配置的自动发现信息,其中就有Outlook获取脱机通讯录的具体位置。
当一个Exchange组织中配置了多个脱机通讯录时,Outlook会下载哪一个呢?这是由用户邮箱所在的邮箱数据库属性决定的。管理员可以通过修改邮箱数据库属性页面的Client Settings=>Offline Address Book的设置,为该数据库上的所有用户指定使用的脱机通讯录。
请注意,默认情况下,邮箱数据库上是没有指定脱机通讯录的,此时Exchange会使用默认脱机通讯录来作为该邮箱数据库的脱机通讯录。例如下图所示,在这个Exchange组织中一共有3个脱机通讯录,如果邮箱数据库上没有指定脱机通讯录,就会自动使用OAB#1。
脱机通讯录的更新
由于脱机通讯录默认配置会在每天的早上5:00进行更新,其它时段是不会主动更新的。可以运行Get-OfflineAddressBook | Update-OfflineAddressBook这个命令,来强制触发所有脱机通讯录的更新。根据Exchange组织规模不同,更新可能会花几分钟到几十分钟不等的时间。
每一个脱机通讯录都对应一个GUID值,Exchange组织根据GUID值来唯一定位一个脱机通讯录。如果组织中配置了多个脱机通讯录,如何判断OAB GUID的值呢?可以使用Get-OfflineAddressBook | select name,guid命令来获取。
脱机通讯录常见错误及排查
Outlook客户端使用脱机通讯录时,最常遇到的错误就是:“该对象不存在”。在前面讨论了脱机通讯录的生成=>发布=>下载过程后,再遇到此类错误,就可以按照这3个部分,依次进行检查,以定位问题的起因。
首先要检查的是Exchange邮箱服务器的ExchangeOAB文件夹。利用前面说提到的Get-OfflineAddressBook 命令,检查ExchangeOAB下是否存在以GUID值命名的子文件夹。如果不存在,那么可以检查这台服务器上的应用程序日志,看看有什么错误或警告信息,根据这些信息进行错误排查。
然后检查Exchange客户端访问服务器的OAB文件夹,是否存在脱机通讯录文件。如果不存在,可以重新启动Microsoft Exchange File Distribution服务,强制复制脱机通讯录。如果问题依然存在,可以检查应用程序日志,根据日志信息继续排查。
最后,检查Outlook客户端的连接。从Outlook 2007开始,Outlook下载脱机通讯录时不再需要Exchange公用文件夹,而是使用HTTP/HTTPS方式。Outlook实际访问的URL是什么呢?这个信息可以通过Outlook的“测试电子邮件自动配置”中获取,自动配置信息,复制其中的OABUrl值,从IE中尝试打开,看看是否能够访问到。
例如从自动配置信息中看到的OABUrl值是https://cas_server/<OAB_GUID>,可以从IE访问https://cas_server/<OAB_GUID>/oab.xml,这样可以用于确定OAB是否可用。
从自动配置信息中找到OABUrl:
在OABUrl之后加上oab.xml,然后从IE进行访问,正常情况下,应该能够打开并看到类似下图的信息。
参考一下服务器上对于这个脱机通讯录的设置,就可以看到oab.xml文件是如何构成的了。这个XML文件中的每一个OAL,都对应于管理员所设置的脱机通讯录中包含的地址列表。
Outlook 2007/2010客户端连接到Exchange时,经常会遇到的另一个问题是,每次连接都会弹出证书安全警告。这是由于Exchange客户端访问服务器上的证书,以及服务的URL路径配置不匹配引起的。关于证书问题的解决方法,将在后续文章中进行讨论。
转载于:https://blog.51cto.com/sujita/601706