把 Exchange 上的全域通訊錄同步到手機上

公司自從去年把郵件伺服器換成了 Exchange 2013 之後,不時的就有人在問是不是可以把公司的全域通訊錄同步到手機上來,由於公司向來有把每個人的手機號碼記錄到 AD 上的習慣,二來公司的人數沒有很多(所以全部同步下來也不會太誇張),加上公司同仁常常出國出差,一般也不會很浪費的都在國外買全程的 3G 上網,所以把通訊錄同步到手機上,臨時有急事時不管在國內國外找起來都比較方便。

我們一開始開放大家用手機收信之後(不是用 POP3), 就發現每次要搜尋公司通訊錄時,在我的 New HTC One 上面就非得要按一下「搜尋公司通訊錄中的聯絡人」選項之後,它才會透過網路去 Exchange 上搜尋(而且小於 4 個字元還不讓你搜尋),原先一直以為這是 Android 4.3 的 bug,後來我的 New HTC One 升級到 4.4 之後也是無濟於事,加上同事的 iPhone 也是一樣的狀況,所以我們便開始研究這中間發生了什麼事

經過幾次錯誤的嘗試之後,發現原來不管是 Android 或 iPhone,在設定了 Exchange 帳號連線之後,都是可以同步聯絡人下來的,只是這個「聯絡人」,指的是個人在 Exchange 上的「通訊錄」,而非「全域通訊錄」。好吧,知道弄錯了之後,我就可以手動的把全域通訊錄中我想同步到手機上的名單一個一個捉進我的個人「通訊錄」了

1

2

然後在 Outlook 中我就可以看到這筆名單出現在我的個人通訊錄中,然後我的手機裡頭過幾分鐘之後也就出現了這筆資料,嗯,看來問題解決了?!

3

啥?!老闆問說,那萬一全域通訊錄有更新時要怎麼辦?我們多了幾位員工或是有人改了電話?我想一位稍有智慧的 MIS 是不會這麼回答老闆的:老闆,就請你自己每天或要出差前記得把全域通訊錄全選起來,然後一次加到你的個人通訊錄中。

所以找來 Google 大神來神一下,發現有這篇文章:Importing Global Address List entries into a user’s Contacts folder

趕緊把裡頭的 script 下載下來拿去 Exchange server 上執行,嗯,步驟有點囉唆,紀錄一下免得自己以後忘記:

首先先找到 Exchange 的 Management Power Shell ,我自己是對 2012 這個如同 Windows 8 的 Metro GUI 是很不習慣的,找個功能還要用搜尋的才找得到…

4

接著執行下面這個指令,新增一個 MailArchivaImpersonation 的角色,使其擁有 Impersonation 的權限,並賦予你現在用來管理 Exchange 的這個使用者擁有這個角色的權限

[PS] C:\>New-ManagementRoleAssignment -Name:MailArchivaImpersonation -Role:ApplicationImpersonation -User:[your account]

5

然後執行剛剛下載下來的 script ,這樣子就可以把全域通訊錄複製到該帳號的個人通訊錄中

[PS] C:\>.\Copy-OrgContactsToUserMailboxContacts.ps1 -Mailbox [account you want to sync GAL] -FolderName Contacts

6

執行完畢之後,我是會把這個權限移除掉,因為感覺上有點危險

[PS] C:\>Remove-ManagementRoleAssignment MailArchivaImpersonation

然後該帳號的 Outlook 個人通訊錄、手機就都會有這些名單了

7

8

由於這個 script 的動作是 複製+覆蓋,所以只要把它設定到 Windows 的工作排程中每天執行,就可以每天 “同步" 全域通訊錄下去了

要讓 Windows 定期執行 Exchange 2013 的 Power Shell command 還有點小學問,不是執行執行那個 *.ps1 檔案就好了,請參考這裡吧:
http://www.msexchange.org/kbase/ExchangeServerTips/ExchangeServer2013/Powershell/scheduling-exchange-powershell-task.html

* 原本該 script 作者只會把全域通訊錄中 1) 有 E-Mail 地址  2) 有手機或公司電話 的資料複製下去,不過由於我們公司對於離職員工的帳號會先 disable 保存一段時間,所以我改了該 script 的 76 行,把被 disabled 的帳號也過濾掉了,改過之後的 script 放在下面,因為 WordPress 似乎不給放 *.ps1 檔案,所以我先壓縮過後改附檔名為 *.doc,有需要的人請自行下載後去掉 *.doc 然後解壓縮就可以得到該 script 了

Copy-OrgContactsToUserMailboxContacts.zip