ええ、Exchangeで重複したSMTPアドレスを処理するのは本当に面倒です。「複数のActive Directoryオブジェクトが同じアドレスを持っています」といったエラーが表示されたり、メールボックスの作成時に「そのアドレスは既にActive Directoryの別の場所に存在します」というメッセージが表示されたりします。少し奇妙に感じるかもしれませんが、こうした問題は、簡単には現れない競合エントリが原因で発生することが多いのです。これらの問題を解決するには、手動またはスクリプトを使って重複を探し出し、各SMTPアドレスが完全に一意であることを確認する必要があります。
ExchangeとADで重複したSMTPアドレスを見つけて修正する方法
方法 1: Active Directory ユーザーとコンピューター (ADUC) を使用する
これは定番の手法ですが、LDAPクエリに慣れている方であれば、実は非常にうまく機能します。Active Directory内でSMTPアドレスを共有するオブジェクトを検索するという考え方です。このLDAPクエリはaduc.mscシンプルですが、プロキシアドレスを直接フィルタリングするため、非常に強力です。
- [実行] ( ) にaduc.mscと入力して、ADUC コンソールを開きますWin + R。
- [検索]に移動して、[カスタム検索]を選択します。
- 「詳細設定」タブに切り替えて、次のLDAPフィルターを貼り付けます
proxyAddresses=smtp:[email protected]。メールアドレスは、確認したいアドレスに置き換えてください。少し面倒ですが、proxyAddresses属性にそのメールアドレスを含むADオブジェクトをフィルタリングします。 - [検索] をクリックすると、その SMTP アドレスを持つオブジェクト (ユーザー、連絡先、グループ) が表示されます。
- 重複が見つかった場合は、オブジェクトを右クリックし、[プロパティ]を選択して、 [属性エディター]タブに移動し、proxyAddresses を見つけて、アドレスが一意になるように編集します。
ええ、設定によっては、特に属性が表示されていない場合やLDAPフィルターが完璧でない場合、検索で誤検出や見逃しが発生することがあります。とはいえ、少なくとも良い出発点にはなります。
方法 2: Active Directory で PowerShell を使用する
スクリプトを使いたい場合は、PowerShell が便利です。数十個のオブジェクトがある場合は、PowerShell の方が高速です。AD でアドレスを検索する一般的なコマンドは次のとおりです。
Get-ADObject -Properties mail, proxyAddresses -Filter {proxyAddresses -like "*smtp:[email protected]*"} | Select Name, proxyAddresses
これにより、そのSMTPエイリアスを持つすべてのオブジェクトが取得されます。出力に複数のオブジェクトが表示される場合は、重複しています。もちろん、「[email protected]」は対象のメールアドレスに置き換えてください。
ご注意ください。このコマンドは、Active Directory モジュールがインストールされ、ADUC の PowerShell またはドメインに参加しているサーバーから実行されることを前提としています。また、管理者として実行する必要がある場合もあります。
方法3: PowerShellでExchangeを確認する
もう一つの方法は、Exchange管理シェルを使ってExchange内で直接確認することです。両方実行する必要があるのは少し奇妙ですが、実行するコマンドは以下のとおりです。
Get-Recipient -ResultSize unlimited | Where-Object { $_. EmailAddresses -like "*[email protected]*" }
すべての受信者(メールボックス、連絡先、グループ)を検索し、そのSMTPアドレスがまだ残っている場所を表示します。複数のオブジェクトが表示されている場合は、それが原因です。
方法4: すべてのメールアドレスをエクスポートして全体像を把握する
上記の方法が遅すぎたり、面倒だったりする場合は、リスト全体をエクスポートすると良いかもしれません。Exchangeで以下のコマンドを実行すると、すべてのメールアドレスがテキストファイルに出力されます。
Get-Recipient -ResultSize unlimited | Select-Object Name, EmailAddresses | Export-Csv C:\PS\Results\all_smtp_addresses.csv -NoTypeInformation
そこからCSVファイルを開き、ExcelやFinder、あるいはテキストファイル内でgrepを使って重複を検索できます。非常にエレガントではありませんが、完全な監査証跡を提供します。
ボーナス: 重複検出にMicrosoft IdFixを使用する
オンプレミスのADとAzure ADの同期で問題(重複によるIDエラーなど)が発生している場合は、IdFixが便利なツールです。ADをスキャンして、重複したメールアドレスやその他の属性の競合を検出します。MicrosoftはSyncを複雑化させざるを得なかったため、IdFixを使うことで、同期前に何が問題なのかを簡単に把握できます。
とはいえ、重複を見つけた後は、SMTPアドレスまたはUPNを編集して各オブジェクトを一意にすることがほとんどです。難しいことではありませんが、メールのルーティングを壊さないように注意が必要です。
ああ、覚えておいてください。重複は最初は分かりにくい場合があります。連絡先に添付されているアドレスや、既存のオブジェクトも確認してください。設定によっては、簡単なクリーンアップで数分で済むこともありますが、スクリプトや手動編集が必要な大変な作業になることもあります。
もちろん、こうした問題のトラブルシューティングはモグラ叩きのようなものです。しかし、上記の方法は比較的安定して機能する傾向があります。なぜうまくいくのかは分かりませんが、AD検索、Exchangeコマンドレット、属性のクリーンアップを繰り返すことで、通常は解決します。
まとめ
- AD 内の重複したアドレスを見つけるには、LDAP フィルターと共にaduc.msc を使用します。
Get-ADObjectまたは などの PowerShell スクリプトを活用してGet-Recipient、検索を高速化します。- proxyAddresses属性を確認し、すべての SMTP が一意であることを確認します。
- 同期の問題が発生した場合や重複が疑われる場合は、Microsoft IdFix の使用を検討してください。
まとめ
重複したSMTPアドレスの処理は面倒ですが、ADツールやExchangeコマンドレットを使って体系的に検索すれば、対処可能です。プロキシアドレスやUPNを編集して重複を修正すれば、通常はエラーが解消され、メールの送受信が再びスムーズになります。少し面倒ですが、一度整理すればシステムの動作が改善され、エラーも発生しなくなります。この方法が誰かの時間の節約になれば幸いです。