トップ回答者
ExOのGALの連絡先をエクスポートし、Outlookの「個人用の連絡先」へインポートする

質問
-
【背景】
ExOのGALの連絡先をエクスポートし、Outlookの「個人用の連絡先」へインポートするという操作を、下記のような状態で実現したいと思っております。
・管理者が、各ユーザーに対して一括処理を行う
・一連の操作を自動更新としたい(タスクマネージャを使用する等)
・ユーザーが個別で登録した連絡先が、GAL更新時や実装する仕組みの実行の際に消去されない
【ご相談】
(A)GALからの連絡先のエクスポートについては、GAL自体はAADから情報を持ってきているので、Get-AzureADUserやGet-AzureADContactコマンドを用いようと思っております。懸念等ございましたら教えていただければと思います。
(B)「個人用の連絡先」へインポートする手段として下記のような方法を考えております。懸念等ございましたら教えていただければと思います。
$cred = get-credential
Invoke-RestMethod -Method post "https://outlook.office365.com/api/v1.0/me/contacts" -InFile "C:\work\import.json" -ContentType 'application/json' -Credential $cred
(C) (B)の実行時、「個人用の連絡先」の特定のフォルダに対してインポートするような実装方法はありますでしょうか。また、対象フォルダが存在しない場合を考慮し、フォルダを作成するコマンドをご存知の方がおりましたら教えていただけますでしょうか。
(D)「個人用の連絡先」の特定のフォルダ内の連絡先を全削除する方法として下記のような方法を考えております(フォルダ自体の削除)。懸念等ございましたら教えていただければと思います。
Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -comobject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")
$contactObject = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderContacts)
$folder = $contactObject.folders | Where-Object {$_.AddressBookName -eq "TEST"}
$folder.Delete()
※上記のコマンド使用時、「TEST」フォルダが「個人用の連絡先」で別階層に複数あった場合、どれが削除されるかの仕様も気になっております。
※下記参考
https://gallery.technet.microsoft.com/scriptcenter/Access-Outlook-Contacts-7c2feb65
https://msdn.microsoft.com/ja-jp/library/office/microsoft.office.interop.outlook.folder.aspx
https://msdn.microsoft.com/ja-jp/library/office/microsoft.office.interop.outlook.mapifolder_members.aspx
(E)管理者から一括で実行しようとする場合、Exchangeの偽装権限の設定が必要と思っておりますが、認識相違ございますでしょうか。
必要な場合は偽装権限設定の手順を教えていただければと思います。
当方開発経験がなく、的外れな質問が御座いましたら申し訳ありません。
ご確認よろしくお願い致します。
回答
-
(B)(D)などで実施をしようとしているのは自分自身の権限で自分の連絡先にインポートしようとしているように見えますが、(E)にもあるようにアプリケーション偽装で作成したいのでしょうか? その場合通常EWSで書く形になると思います。
Creating contacts by using the EWS Managed API 2.0
https://msdn.microsoft.com/en-us/library/office/ee693007(v=exchg.80).aspxWorking with impersonation by using the EWS Managed API 2.0
https://msdn.microsoft.com/en-us/library/office/dd633680%28v=exchg.80%29.aspxそもそも、開発の目的としてグローバルアドレス帳ではなくOutlookの連絡先を利用したいということですが、どういった意図があるのでしょうか? そもそも、アドレスの解決にGALを優先させるか連絡先フォルダを優先させるかなどは各ユーザーの設定によるので、内容に差分が出た場合などに運用が大変になるのではないかと思うのですが…。
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2017年6月7日 2:18
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年6月16日 7:53
-
前述しましたが、EWSを利用すれば各個人のメールボックス内の連絡先オブジェクトの操作が可能ですので、アプリケーション偽装を利用した上で、作りこめば開発は可能かと思います。
Working with contacts by using the EWS Managed API 2.0
https://msdn.microsoft.com/EN-US/library/office/ee693004(v=exchg.80).aspxしかしながら、iPhoneにインポートさせるためだけに一度Outlookに食わせるというのは少しコストが高いのではないか…と。
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2017年6月7日 2:18
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年6月16日 7:52
-
GALから直接というよりは、GALから抽出したCSVを希望する個人のiPhoneに…と思っておりました。
(サードパーティ製のアプリを利用せず、iPhone側の標準アプリだけだと少し難しそうですが。)- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2017年6月8日 8:19
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年6月16日 7:52
-
有償ですが、 下記のような Service もあります。
CiraSync is the fastest, easiest, most flexible way to sync Public Folder contacts and calendars to Androids and iPhones
https://www.cirasync.com/gal-sync/
- 編集済み JR K YoshikawaMVP 2017年6月9日 17:37
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2017年6月12日 4:32
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年6月16日 7:52
すべての返信
-
(B)(D)などで実施をしようとしているのは自分自身の権限で自分の連絡先にインポートしようとしているように見えますが、(E)にもあるようにアプリケーション偽装で作成したいのでしょうか? その場合通常EWSで書く形になると思います。
Creating contacts by using the EWS Managed API 2.0
https://msdn.microsoft.com/en-us/library/office/ee693007(v=exchg.80).aspxWorking with impersonation by using the EWS Managed API 2.0
https://msdn.microsoft.com/en-us/library/office/dd633680%28v=exchg.80%29.aspxそもそも、開発の目的としてグローバルアドレス帳ではなくOutlookの連絡先を利用したいということですが、どういった意図があるのでしょうか? そもそも、アドレスの解決にGALを優先させるか連絡先フォルダを優先させるかなどは各ユーザーの設定によるので、内容に差分が出た場合などに運用が大変になるのではないかと思うのですが…。
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2017年6月7日 2:18
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年6月16日 7:53
-
ご回答ありがとうございます。
開発の目的としては、GALに存在している連絡先からiPhoneへ電話がかかってきた場合に名前を表示させる、ということです。
そのため、前提として下記を想定しております。
①「iPhoneへ電話がかかってきた場合に名前を表示させる」には、iPhone標準連絡先アプリに、氏名と電話番号が登録されていること
②ActiveSyncで、iPhone標準連絡先アプリとOutlook個人用の連絡先が同期していること
⇒①②があり、GALの情報をOutlook個人用の連絡先へインポートすれば要件が実現できる。
>(B)(D)などで実施をしようとしているのは自分自身の権限で自分の連絡先にインポートしようとしているように見えますが、(E)にもあるようにアプリケーション偽装で作成したいのでしょうか?
紛らわしい書き方をして申し訳ないですが、自分自身ではなく管理者が各ユーザーに対して操作を実行させたく思っております。
よろしくお願い致します。
-
前述しましたが、EWSを利用すれば各個人のメールボックス内の連絡先オブジェクトの操作が可能ですので、アプリケーション偽装を利用した上で、作りこめば開発は可能かと思います。
Working with contacts by using the EWS Managed API 2.0
https://msdn.microsoft.com/EN-US/library/office/ee693004(v=exchg.80).aspxしかしながら、iPhoneにインポートさせるためだけに一度Outlookに食わせるというのは少しコストが高いのではないか…と。
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2017年6月7日 2:18
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年6月16日 7:52
-
GALから直接というよりは、GALから抽出したCSVを希望する個人のiPhoneに…と思っておりました。
(サードパーティ製のアプリを利用せず、iPhone側の標準アプリだけだと少し難しそうですが。)- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2017年6月8日 8:19
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年6月16日 7:52
-
有償ですが、 下記のような Service もあります。
CiraSync is the fastest, easiest, most flexible way to sync Public Folder contacts and calendars to Androids and iPhones
https://www.cirasync.com/gal-sync/
- 編集済み JR K YoshikawaMVP 2017年6月9日 17:37
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2017年6月12日 4:32
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年6月16日 7:52