Partager via


複数 の DC が存在する環境下でConnect-Mailbox コマンド を実行する際の注意事項

こんにちは、Exchange サポートの山木です。

Exchange を運用する上で、メールボックスの無効化 (Disable-Mailbox) や切断されたメールボックスへの接続 (Connect-Mailbox) を日々の業務で行うことがあると思います。
お客様環境に複数の DC が存在する環境下で Connect-Mailbox コマンドで切断されたメールボックスへの接続を行う場合は、コマンド実行後に必ず Clean-MailboxDatabase コマンドを実行するようにして下さい。
詳細は後述いたしますが、手順によっては該当メールボックスの DisconnectDate が更新されない場合があり、メールボックスの接続確認をしばらく行わなかったり、削除済みメールボックス保存期間 (既定 : 30 日) を短く設定している場合にはメールボックスが意図せず削除されることがあります。

切断されたメールボックスの削除タイミングについて
====================================
メールボックスを無効 (Disable-Mailbox) にすると、対象のユーザー オブジェクトから Exchange 関連の属性が削除され、データベース上のメールボックスは切断されたメールボックスになります。
メールボックスの切断後は、削除済みメールボックス保存期間 (既定 : 30 日) が経過するまではデータベース上に保持されるため、データベースから削除されるまでは管理者によって切断されたメールボックスへの接続 (Connect-Mailbox) を行うことができます。
この際、サーバーがメールボックスを保持するかどうかを判断している属性が DisconnectDate であり、DisconnectDate の日時から削除済みメールボックス保存期間 (既定 : 30 日) が経過したメールボックスを Exchange サーバーは削除する動作となります。
DisconnectDate は Disable-Mailbox や Remove-Mailbox コマンドを実行することで付与され、Connect-Mailbox コマンドを実行することで DisconnectDate の値が削除されます。
しかしながら、お客様環境に DC が複数台存在する場合、Connect-Mailbox コマンドを実行しても DisconnectDate の値が削除されないケースがあり、更新されなかったことに気付かず削除済みメールボックス保存期間が経過すると Exchange サーバー上からメールボックスが削除されます。
通常であれば、Connect-Mailbox コマンドの実行後はユーザーがメールボックスにログインできるかどうかを確認するため、Outlook や OWA からログインできないと管理者へ問い合わせがあり気付くことができますが、Connect-Mailbox コマンド実行後にしばらくメールボックスへのログイン確認を行わない場合には、発見が遅くなります。

DisconnectDate の値が更新されないしくみ
====================================
ではなぜ、DC が複数台存在する場合に DisconnectDate が更新されないことがあるのでしょうか?
それは、PowerShell (IIS のワーカー プロセスである w3wp) と Microsoft Exchange Information Store Service が参照する DC が異なる場合があり、参照する DC がそれぞれのプロセスで別々の場合に発生します。
では、Connect-Mailbox コマンド実行時の内部的なフローを見ながら説明していきましょう。

090101

図 1. Connect-Mailbox コマンド実行時の内部的なフロー

Connect-Mailbox コマンドは上記図に示すフローで対象メールボックスの DisconnectDate の値を更新します。

① Connect-Mailbox コマンドを実行する
② w3wp.exe (※1) が Microsoft Exchange Information Store Service へのRPC 疎通を確認する (RPC接続できなければ、以降の処理を実施すべきではないため)
③ w3wp.exe がアクセス先 DC の問い合わせを Microsoft Exchange Active Directory Topology Service へ行い、返された DC に対し、対象ユーザーの Exchange 属性を追加する
④ 上記 ③ で Exchange 属性を追加後、Microsoft Exchange Information Store Service に通知したのち、Microsoft Exchange Information Store Service は自プロセスが参照する DC に対し、対象ユーザーの Exchange 属性の有無を確認する
⑤ 上記 ④ で対象ユーザーの Exchange 属性が確認できた場合、対象ユーザーのメールボックスを有効状態にし、DisconnectDate の値を削除する

※1:w3wp.exe は IIS のワーカープロセスであり、Disable-Mailbox 及び Connect-Mailbox コマンドなど PowerShell の実行ホストとなり、実処理を行います。

上記 ④ で Microsoft Exchange Information Store Service が参照する DC は、接続性の問題が検出されない限りサイト内の特定の DC を使用し続けますが、上記 ③ で w3wp.exe がアクセス先 DC の問い合わせを行う際、Microsoft Exchange Active Directory Topology Service より DC がラウンドロビンに返されるため、Exchange 組織内に複数の DC が存在する場合には各プロセスが異なる DC を参照するケースが存在します。
この際、参照される DC 間では対象ユーザーの Exchange 属性のレプリケーションが完了していない状態が発生し得るため、Microsoft Exchange Information Store Service は、 再接続したユーザーと対象ユーザーのメールボックスが紐づけられていることを判断するための Exchange 属性が見つからない場合、DisconnectDate の値を削除しません。
この場合にはエラーイベントが記載されず、 コマンドは正常に終了します。 その結果として、AD 上ではメールボックスが有効な状態であるが、Exchange ストア上はメールボックスが無効なままといった不整合な状態に至ることがあります。

対処策について
====================================
本動作を考慮した運用を行っていただくことで対処することが可能です。
具体的には、Connect-Mailbox コマンドの対象ユーザーが所属するデータベースに対して Clean-MailboxDatabase コマンドを実行し、AD 上の情報とデータベース上の情報の不整合を解消することで回避することができます。
Clean-MailboxDatabase コマンドでは DC 上にあるユーザーの Exchange 属性の再スキャンを行い、 データベース上のメールボックスの情報と不一致 (不整合)であった場合に、メールボックスの情報を AD 上の情報に合わせ、不整合を解消します。

Clean-MailboxDatabase –Identity  <該当データベース>

- 参考情報
Title : Clean-MailboxDatabase
URL : https://technet.microsoft.com/ja-jp/library/bb124076(v=exchg.141).aspx

お客様環境に複数の DC が存在する環境の場合は、Connect-Mailbox コマンドの実行後に Clean-MailboxDatabase コマンドを実行頂き、DisconnectDate の値が正常に反映されていることをご確認ください。

Get-MailboxDatabase | Get-MailboxStatistics | where {$_.Displayname –eq “ユーザー名"} | fl

出力例 )
----------------
RunspaceId : 82b40ab6-5853-4c9e-807f-b554cfb3ca96
AssociatedItemCount : 31
DeletedItemCount : 9
DisconnectDate : ← 対象ユーザーの DisconnectDate が空白となっていることを確認します。
DisconnectReason :
DisplayName : test01
----------------

その他にも Clean-MailboxDatabase コマンドを実行するシチュエーションとしては、以下がございます。
いずれも 対象のメールボックスにおける AD上の情報と Exchange ストア上の情報に、不整合な状態が発生することで発生いたします。下記シチュエーションに合致する作業を行う場合には、作業後に Clean-MailboxDatabase コマンドを実行頂くことをお勧めいたします。

・Exchange 管理コンソール (Exchange 管理センター) 上で “切断されたメールボックス” に表示されない
・メールボックスの移動 (New-MoveRequest) を行った後にメールボックスに接続できない

Exchange 2013 以降でもこのように AD上の情報と Exchange ストア上の情報に、不整合な状態が発生することで Exchange 上で予期せぬ動作が行われる可能性があり、同様の対処方法で不整合を解消することになります。
Exchange 2010 までは Clean-MailboxDatabase コマンドですが Exchange 2013 以降ではコマンドが変更となり、Update-StoreMailboxState コマンドとなります。Update-StoreMailboxState コマンドは下記弊社 Blog でも紹介しておりますので併せてご参照下さい。

- 参考情報
Title : "切断されたメールボックス" の表示について
URL : https://blogs.technet.microsoft.com/exchangeteamjp/2014/04/24/308/
※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。