公司自從去年把郵件伺服器換成了 Exchange 2013 之後,不時的就有人在問是不是可以把公司的全域通訊錄同步到手機上來,由於公司向來有把每個人的手機號碼記錄到 AD 上的習慣,二來公司的人數沒有很多(所以全部同步下來也不會太誇張),加上公司同仁常常出國出差,一般也不會很浪費的都在國外買全程的 3G 上網,所以把通訊錄同步到手機上,臨時有急事時不管在國內國外找起來都比較方便。
我們一開始開放大家用手機收信之後(不是用 POP3), 就發現每次要搜尋公司通訊錄時,在我的 New HTC One 上面就非得要按一下「搜尋公司通訊錄中的聯絡人」選項之後,它才會透過網路去 Exchange 上搜尋(而且小於 4 個字元還不讓你搜尋),原先一直以為這是 Android 4.3 的 bug,後來我的 New HTC One 升級到 4.4 之後也是無濟於事,加上同事的 iPhone 也是一樣的狀況,所以我們便開始研究這中間發生了什麼事
經過幾次錯誤的嘗試之後,發現原來不管是 Android 或 iPhone,在設定了 Exchange 帳號連線之後,都是可以同步聯絡人下來的,只是這個「聯絡人」,指的是個人在 Exchange 上的「通訊錄」,而非「全域通訊錄」。好吧,知道弄錯了之後,我就可以手動的把全域通訊錄中我想同步到手機上的名單一個一個捉進我的個人「通訊錄」了
然後在 Outlook 中我就可以看到這筆名單出現在我的個人通訊錄中,然後我的手機裡頭過幾分鐘之後也就出現了這筆資料,嗯,看來問題解決了?!
啥?!老闆問說,那萬一全域通訊錄有更新時要怎麼辦?我們多了幾位員工或是有人改了電話?我想一位稍有智慧的 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 是很不習慣的,找個功能還要用搜尋的才找得到…
接著執行下面這個指令,新增一個 MailArchivaImpersonation 的角色,使其擁有 Impersonation 的權限,並賦予你現在用來管理 Exchange 的這個使用者擁有這個角色的權限
[PS] C:\>New-ManagementRoleAssignment -Name:MailArchivaImpersonation -Role:ApplicationImpersonation -User:[your account]
然後執行剛剛下載下來的 script ,這樣子就可以把全域通訊錄複製到該帳號的個人通訊錄中
[PS] C:\>.\Copy-OrgContactsToUserMailboxContacts.ps1 -Mailbox [account you want to sync GAL] -FolderName Contacts
執行完畢之後,我是會把這個權限移除掉,因為感覺上有點危險
[PS] C:\>Remove-ManagementRoleAssignment MailArchivaImpersonation
然後該帳號的 Outlook 個人通訊錄、手機就都會有這些名單了
由於這個 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 了
版大,
很感謝你分享的這篇文章,長期以來無法逹到的功能,終於露出一線曙光,實作上有個問題想請教您,雖然在outlook上可建多個個人通訊錄,但在手機上(THC),只會有一個預設的’連絡人’個人通訊錄,因此若更新清單時,只是單純的將GAL 完全覆蓋更新,這樣手機上建立的通訊人員資料,就會被覆蓋掉,不知您如何處理,因為我試過只會新至手機的’連絡人’通訊錄,使用其它名稱時,都不會在手機上出現
我不確定你的問題是不是和我一樣,但已我用過的兩支HTC手機來看(HTC One M7 和 M9),他的電話簿可以從左上角去選擇「多重來源」的,以我自己的手機來看,上面就有 SIM, WhatsApp, Exchange ActiveSync (就是我公司 Exchange 聯絡人), Skype, Facebook, Google, 手機聯絡人這幾種來源,彼此不會互相影響才對。
所以我依照原作者的方法-把所有 Exchange/Outlook 聯絡人清空之後,再通通下載/同步進去,是不會影響到我HTC裡原本電話簿資訊的,因為原本就是屬於不同來源。
我自己是有發現另外的問題是,如果使用者原本就有在他自己的 Exchange/Outlook 聯絡人記錄一些個人用的聯絡人資訊時,就不好用 清空/再寫入的方法來處理了,但幸好現在和十年前不同,大家的個人電話簿不是用Google就是用iCloud來管理了,我看我們公司裡頭還在用Exchange/Outlook聯絡人的算是寥寥無幾了。
原本上面這個問題還可以以另外新增Exchange/Outlook聯絡人資料夾的方式來處理,但我發現只有 HTC 的手機會把非預設的聯絡人資料夾同步下來(也許你是這個問題? 我眼中的優點變你的缺點?),Asus 的不會,iPhone 印象中好像會,Samsung 的印象中不會,所以沒有放諸四海皆準,也就不方便這麼用了。
1.主要就是公司業務單位統一使用Exchange/Outlook聯絡人,才會有這困擾,不過就目前公司的的HTC手機來看,只會同步聯絡人資料夾,所以只要一更新,user自已新增在Exchange/Outlook聯絡人中的資料就會清空只有GAL的資料
2. 另外要設定排程自動執行,難度頗高(苦笑),程式檔,PS1檔及參數,怎麼湊,測試都不會成功,目前呈放棄狀態
最後再次感謝你的回應.
1. 如果都用 HTC 手機的話,那應該很簡單吧? 只要把公司的 GAL 同步到另外一個資料夾 (eg. 改一下附件的 script 內容,把原先同步到 Contacts 的地方改成 CompanyContacts) ,那 user 自己建立在預設聯絡人資料夾 (Contacts) 的就不會被蓋掉了
2. 排程應該蠻簡單的吧? 這邊有中文的文章
想請教在排程的動作中,指令碼欄位及引數欄位是如下這樣嗎? 試了好多種方式仍就不會更新
程式或指令碼:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
新增引數:
-File c:\Copy-OrgContactsToUserMailboxContacts.ps1 -Mailbox stone.chen -FolderName 連絡人"
由廠商協助,已確認引數欄位設定如下,即可正確執行了
-version 2.0 -NonInteractive -WindowStyle Hidden -command “. ‘D:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1’; Connect-ExchangeServer -auto; c:\Copy-OrgContactsToUserMailboxContacts.ps1 -Mailbox stone.chen -FolderName 連絡人"
很高興看到您的問題已經被解決了,這幾天沒上來看回覆,不好意思
Hello colleagues, nice paragraph and pleasant urging commented here, I am actually
enjoying by these.