none
ExOのGALの連絡先をエクスポートし、Outlookの「個人用の連絡先」へインポートする RRS feed

  • 質問

  • 【背景】
    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の偽装権限の設定が必要と思っておりますが、認識相違ございますでしょうか。
    必要な場合は偽装権限設定の手順を教えていただければと思います。


    当方開発経験がなく、的外れな質問が御座いましたら申し訳ありません。
    ご確認よろしくお願い致します。
    2017年6月1日 11:08

回答

すべての返信

  • (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).aspx

    Working 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を優先させるか連絡先フォルダを優先させるかなどは各ユーザーの設定によるので、内容に差分が出た場合などに運用が大変になるのではないかと思うのですが…。

    2017年6月5日 7:19
  • ご回答ありがとうございます。

    開発の目的としては、GALに存在している連絡先からiPhoneへ電話がかかってきた場合に名前を表示させる、ということです。

    そのため、前提として下記を想定しております。

    ①「iPhoneへ電話がかかってきた場合に名前を表示させる」には、iPhone標準連絡先アプリに、氏名と電話番号が登録されていること

    ②ActiveSyncで、iPhone標準連絡先アプリとOutlook個人用の連絡先が同期していること

    ⇒①②があり、GALの情報をOutlook個人用の連絡先へインポートすれば要件が実現できる。

    (B)(D)などで実施をしようとしているのは自分自身の権限で自分の連絡先にインポートしようとしているように見えますが、(E)にもあるようにアプリケーション偽装で作成したいのでしょうか?

    紛らわしい書き方をして申し訳ないですが、自分自身ではなく管理者が各ユーザーに対して操作を実行させたく思っております。

    よろしくお願い致します。

    2017年6月5日 8:03
  • 前述しましたが、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に食わせるというのは少しコストが高いのではないか…と。

    2017年6月6日 4:10
  • ご回答・情報のご提供ありがとうございます。

    大変参考になります。

    >iPhoneにインポートさせるためだけに一度Outlookに食わせるというのは少しコストが高いのではないか

    とのことですが、GALからiPhoneへ直接持ってくるようなやりようがありそうということでしょうか。。

    もしなにか情報等お持ちでしたらお手数ですがご共有いただければと思います。

    2017年6月6日 11:39
  • GALから直接というよりは、GALから抽出したCSVを希望する個人のiPhoneに…と思っておりました。
    (サードパーティ製のアプリを利用せず、iPhone側の標準アプリだけだと少し難しそうですが。)

    2017年6月8日 0:13
  • ご返信ありがとうございます。

    こちらも伝わりづらい書き方をしてしまい申し訳ありません。

    一旦いただいた情報で検討してみます!

    2017年6月8日 8:11
  • 有償ですが、 下記のような 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/


    2017年6月9日 17:37