オンプレミスサーバーでも Exchange Online でも、グローバル アドレス一覧 (GAL) を CSV にエクスポートする方法
Exchange環境からすべてのメールアドレスと連絡先を整理してリスト化するのは、必ずしも簡単ではありません。ある環境ではExchange管理センター(EAC)に直接アクセスできる一方、別の環境ではすべてをPowerShellやOutlookで実行している場合もあります。GALをエクスポートするだけですぐに完了するように見えることもありますが、Windows / Exchange / Officeは、物事を必要以上に難しく見せてしまうことがあります。このガイドでは、実際に機能するいくつかの方法と、公式ドキュメントには記載されていない落とし穴やヒントを紹介します。
基本的に、これは連絡先の転送、アドレス帳の同期、あるいは会社のメール連絡先のバックアップを保存したい場合に便利です。一部のオプションでは、SMTPアドレスなど一部の情報しか取得できなかったり、管理者権限が必要になったりする点にご注意ください。しかし、適切なコマンドと手順を使えば、ローカルでもクラウドベースでも、アドレスリストの適切なCSVファイルを取得できます。
オンプレミスの Exchange サーバーでグローバル アドレス一覧を CSV にエクスポートする方法
Exchange 管理センター (EAC) の使用
小規模な設定や管理インターフェースにアクセスできる場合は、これが最も簡単な方法です。「受信者」タブに移動し、「メールボックス」タブを見つけます。メニュー(省略記号「…」)をクリックし、「データをCSVファイルにエクスポート」のような項目を探します。この機能は自動的に表示される場合もありますが、追加の権限や特定のExchangeバージョンが必要になる場合もあります。表示される場合は、必要なプロパティ(メールアドレス、名前、電話番号など)を選択してエクスポートします。ただし、この方法では通常、出力はユーザーのメールボックス情報のみに制限されることに注意してください。
配布グループまたは連絡先の場合は、「グループ」または「連絡先」に切り替えて、エクスポートオプションが表示されるかどうかを確認してください。GUIからは常に表示されるとは限りませんが、試してみる価値はあります。特にフィールド数を増やしたり、リストを整理したりしたい場合は、PowerShell経由で実行した方が制御しやすい場合もあります。
PowerShell 経由で GAL 情報を取得する
ここからが本当の力を発揮するところです。まず、PowerShellからExchangeサーバーに接続します。Exchangeサーバー上、またはリモートPowerShellを使用して、次のコマンドを実行します。
Connect-ExchangeServer -UserPrincipalName [email protected] -ShowProgress $true
(ハイブリッド環境またはクラウド環境では、 Connect-ExchangeOnlineを使用します)。次に、受信者のリストを取得するコマンドは次のようになります。
Get-Recipient -ResultSize Unlimited | Select-Object Name, PrimarySmtpAddress, Phone | Export-CSV -Path "C:\exchange\GAL.csv" -NoTypeInformation
これにより、すべての受信者(ユーザー、グループ、連絡先)が1つのCSVにまとめられます。デフォルトGALのユーザーのみが必要な場合は、フィルターを使用してください。
$filter = (Get-GlobalAddressList "Default Global Address List").RecipientFilter Get-Recipient -RecipientPreviewFilter $filter -ResultSize Unlimited | ` Where-Object { -not $_. HiddenFromAddressListsEnabled } | ` Select-Object Name, PrimarySmtpAddress, Phone | ` Export-CSV -Path "C:\exchange\GAL_filtered.csv" -NoTypeInformation
注: 設定によっては、受信者の上限が1, 000人に達し、追加が必要になる場合があります-ResultSize Unlimited。また、アドレスリストから非表示にすると、フィルタリングしない限り、一部のエントリが表示されない場合があります。
ADをご利用ですか?GALもActive Directoryに登録されている場合は、csvde.exeやPowerShellなどのツールをGet-ADUser使って、SMTPプロキシアドレスを含むユーザーをエクスポートできます。例:
Get-ADUser -Filter * -SearchBase "OU=London, OU=UK, DC=domain, DC=com" -Properties proxyAddresses | ` Select-Object Name, ProxyAddresses | ` Export-CSV C:\PS\AD_GAL.csv
ただし、メール対応属性が設定されていない限り、ADからのエクスポートではExchangeの情報がすべて反映されない可能性があることにご注意ください。ただし、Exchangeの外部でも完全なユーザーリストを取得するには便利です。
Exchange Online (Microsoft 365) からのエクスポート
PowerShellを使用してGALを取得する
MicrosoftはWebインターフェースからのGAL直接エクスポートを無効にしているため、PowerShellを使用するのが最適です。まず、EXO V3モジュールに接続します。
Connect-ExchangeOnline
次に、GAL をリストします。
Get-GlobalAddressList | Select-Object Name
デフォルトのGALしか表示されない場合は、おそらくこれが唯一の選択肢です。リスト内のすべての受信者を取得するには、次のコマンドを実行します。
$filter = (Get-GlobalAddressList "Default Global Address List").RecipientFilter Get-Recipient -RecipientPreviewFilter $filter -ResultSize Unlimited | ` Select-Object Name, PrimarySmtpAddress, RecipientType | ` Export-CSV -Path "C:\PS\Office365_GAL.csv" -NoTypeInformation
これは、ユーザーから配布グループまで、すべてのユーザーを含む包括的なリストをエクスポートします。ただし、このリストは非常に大きくなる可能性があり、隠しアカウントやシステムアカウントを除外するには追加のコマンドが必要になる場合があることに注意してください。
Outlook/Access で特定の情報を追跡する
管理者でない、またはPowerShellを操作したくない場合は、回避策があります。ただし、少し面倒です。組織の連絡先をOutlookの連絡先に手動で追加できます。「アドレス帳」に移動し、「グローバルアドレス一覧」を選択し、Ctrl + Aを押してすべて選択し、「連絡先に追加」をクリックします。個人の連絡先と同期したら、OutlookからCSV形式でエクスポート(「ファイル」→ 「開くとエクスポート」 → 「インポート/エクスポート」)し、整理することができます。
正直、これは回りくどい方法のように思えますが、管理者以外のユーザーにとっては、組織の設定を混乱させることなく実行できる唯一の現実的な方法です。Microsoft Access で Exchange コネクタを使用することもできます。新しいデータベースを開き、「ファイル」 > 「開く」 > 「Exchange」を選択します。
- グローバルアドレス一覧を選択
- テーブル内のデータを取得する
- そのテーブルをCSVに直接エクスポートする
完璧ではありませんが、Office ツールに制限されていて適切な権限がない場合は、これが唯一の方法になることもあります。
まとめ
- PowerShell (オンプレミスまたはオンライン) を使用して、GAL データの完全なエクスポートを取得します
Get-Recipient。 - ローカルへのエクスポートを迅速に行うには、EAC にエクスポート オプションがあるかどうかを確認します。
- Active Directory エクスポートは AD 情報には機能しますが、Exchange 固有の詳細が失われる可能性があります。
- Outlook/Access のエクスポート方法は扱いにくいですが、管理者でない場合は実行可能です。
まとめ
メールアドレスをCSVファイルに取り込むのは、特に権限やインターフェースの制限がある場合、必ずしも思ったほどスムーズにはいきません。通常、特にExchange Onlineでは、PowerShellが最も効果的です。しかし、他の方法がうまくいかない場合は、Outlookを使った手動プロセスで対応することも可能です。ただし、あまりスマートとは言えません。この方法が誰かの時間を節約したり、少なくとも正しい方向を指し示したりできれば幸いです。頑張ってください!