Partager via


SMTP アドレスが重複しているとインプレース電子情報開示での PST エクスポートに失敗する

こんにちは。 Exchange サポート チームの山崎です。
今回は、Office 365 テナント内に SMTP アドレスが重複しているとインプレース電子情報開示を利用した検索結果を PST エクスポート時に失敗する現象と、その対処方法についてご説明します。

現象について
Exchange Online において、非アクティブなメールボックスとアクティブなメールボックスでメール アドレスが重複している場合、インプレースの電子情報開示と保持による、PST ファイルへのエクスポートが正常に行えない場合がございます

例えば、非アクティブなメールボックスとアクティブなメールボックスでメール アドレスが重複している状況として、以下の 3 パターンの状況が考えられます。
本記事では、それぞれのパターンに当てはまる場合の対処策について説明させていただきます。

パターン1: 1 つのアクティブなメールボックスと、1 つの非アクティブなメールボックスで メール アドレスが重複の場合
パターン2: 2 つ以上の非アクティブなメールボックスのみで メール アドレスが重複の場合
パターン3: 1 つのアクティブなメールボックスと、2 つ以上の非アクティブなメールボックスで重複が発生している場合

メール アドレスが重複している状況で、インプレースの電子情報開示と保持による PST ファイルのエクスポートを行った時にエラーとなった場合には、例えば以下のエラーが発生します。

エラー内容
----------
Export failed with error: Export failed with error type: FailedToAutoDiscoverExchangeWebServiceUrl Message: user@domain.com (deleted user)
----------
*補足事項
上記の現象について、メール アドレスの重複が発生している場合にも正常にエクスポートができるように修正が検討されましたが修正は見送られております。
インプレース電子情報開示を利用したメールボックスの検索には EWS (Exchange Web Services) を利用しており、現時点の実装において SMTP アドレスの重複が発生した状態では EWS が正しく動作いたしません。
しかしながら、EWS がインプレース電子情報開示以外の様々な機能で利用されており、修正を行う場合の影響範囲とリスクが非常に大きいことから、結果としては見送りとなりました

対処方法について
上記現象の対処を行うには、メール アドレスの重複が発生しない状態にする必要がございます。
以下に、パターンごとの対処方法を記載しましたので、同様の現象が発生した場合には、以下の手順を参考にメール アドレスの重複を解消し、エクスポート処理を実施ください。

概要
========
パターン1:
MBX0、MBX1 は同一の SMTP アドレスを持つメールボックスで、MBX0 がアクティブ メールボックス、MBX1 が非アクティブ メールボックスとします。

1. 非アクティブ メールボックス MBX1 を別のメールアドレスを持つ MBX1’ として復元します。(手順 A.)
2. ライセンスを付与し、元の MBX1 と同じインプレース保持の対象に MBX1’ を追加します。(手順 B.)
3. MBX1’ のメールボックスを削除し、非アクティブ メールボックスにします。同時に、MBX1’ と紐づけられていた Azure AD ユーザーを完全に削除します。(手順 C.)
4. MBX1 に設定されたインプレース保持の設定を全て削除します。(MBX1 の Azure AD ユーザーが完全に削除されていない場合は、手動で削除します。) (手順 D.)
⇒ Office 365 の処理にて MBX1 が非アクティブ メールボックスから削除されます。ただし、即時ではない場合がございます。
5. MBX0、MBX1’ に対して PST エクスポートを実施してください。 (※1)
※1 MBX0 に対する PST エクスポートは MBX1 および MBX2 の削除処理完了まで失敗してしまう可能性がございます。

  

パターン2:
MBX1 と MBX2 は同一の SMTP アドレスを持つ非アクティブ メールボックスとします。

1. 非アクティブ メールボックス MBX1 を別のメールアドレスを持つ MBX1’ として復元します。(手順 A.)
2. ライセンスを付与し、元の MBX1 と同じインプレース保持の対象に MBX1’ を追加します。(手順 B.)
3. MBX1’ のメールボックスを削除し、非アクティブ メールボックスにします。同時に、MBX1’ と紐づけられていた Azure AD ユーザーを完全に削除します。(手順 C.)
4. MBX1 に設定されたインプレース保持の設定を全て削除します。(MBX1 の Azure AD ユーザーが完全に削除されていない場合は、手動で削除します。) (手順 D.)
⇒ Office 365 の処理にて MBX1 が非アクティブ メールボックスから削除されます。ただし、即時ではない場合がございます。
5. MBX2 に対して上記の 1 から 4 の処理をします。(※1、※2)
6. MBX1’ および MBX2’ に対して PST エクスポートを実施してください。
※1 重複している非アクティブ メールボックスが 3 つ以上ある場合も、同様の処理を実施してください。
※2 重複しているメールボックスすべてに対してではなく、1 つを除いて対処することでも問題はございません。
上記例の場合、MBX2 に対する処理は必ずしも必須ではありません。
ただし、MBX1 の削除が即時でない場合があり、それが起因して MBX2 の PST エクスポート処理が失敗する可能性がございますので、その点を考慮頂き、対処を検討頂ければ幸いです

 

パターン3:
MBX0、MBX1、MBX2 は同一の SMTP アドレスを持つメールボックスで、MBX0 がアクティブ メールボックス、MBX1 および MBX2 が非アクティブ メールボックスとします。

1. 非アクティブ メールボックス MBX1 を別のメールアドレスを持つ MBX1’ として復元します。(手順 A.)
2. ライセンスを付与し、元の MBX1 と同じインプレース保持の対象に MBX1’ を追加します。(手順 B.)
3. MBX1’ のメールボックスを削除し、非アクティブ メールボックスにします。同時に、MBX1’ と紐づけられていた Azure AD ユーザーを完全に削除します。(手順 C.)
4. MBX1 に設定されたインプレース保持の設定を全て削除します。(MBX1 の Azure AD ユーザーが完全に削除されていない場合は、手動で削除します。) (手順 D.)
⇒ Office 365 の処理にて MBX1 が非アクティブ メールボックスから削除されます。ただし、即時ではない場合がございます。
5. MBX2 に対して上記の 1 から 4の処理をします。(※1)
6. MBX0、MBX1’、MBX2’ に対して PST エクスポートを実施してください。 (※2)
※1 重複している非アクティブ メールボックスが 3 つ以上ある場合も、同様の処理を実施してください。
※2 MBX0 に対する PST エクスポートは MBX1 および MBX2 の削除処理完了まで失敗してしまう可能性がございます。

  

詳細手順
========
上記手順概要におけるそれぞれの手順 (手順 A/B/C/D) の詳細について記載いたします。

手順A: 重複している非アクティブ メールボックスの復元手順
1. SMTP アドレスが重複しない新規メールボックスを作成し、必要に応じてアーカイブを有効にします。Exchange Online でのメールボックスの作成方法およびアーカイブの有効化は以下を参照ください。

Title: Exchange Online でユーザー メールボックスを作成する
URL: https://technet.microsoft.com/ja-jp/library/jj907304(v=exchg.150).aspx

Title: Exchange Online のアーカイブ メールボックスを有効または無効にする
URL: https://technet.microsoft.com/ja-jp/library/jj984357(v=exchg.150).aspx

2. 復元リクエストを実行します。
手順1 を実行した後、暫く時間をおき、以下のコマンドを実行します。
* New-Mailbox コマンド実行直後に復元リクエストを実行すると、メールボックスの作成が完全に完了していない場合があり、実行に失敗する場合がございます。その為、数十分おいてから次の処理を実行ください。

New-MailboxRestoreRequest -Name "<リクエスト名>" -SourceMailbox "<メールアドレス重複メールボックス GUID>" -TargetMailbox "<新規作成したメールボックス GUID>" -AllowLegacyDNMismatch

アーカイブメールボックスについても復元する場合は以下を実行します。
New-MailboxRestoreRequest -Name "<リクエスト名>" -SourceMailbox "<メールアドレス重複メールボックスのアーカイブメールボックス GUID>"  -TargetMailbox "<新規作成したメールボックスのアーカイブメールボックス GUID>" -SourceIsArchive -TargetIsArchive -AllowLegacyDNMismatch

*補足事項1
メールボックスの GUID は以下のコマンドで確認が可能です。

コマンド:
Get-Mailbox <メールボックス名> | FL GUID

実行例:
Get-Mailbox MBX0 | FL GUID

Guid : 50ed1388-5f53-4c31-b650-acdd2ee74a5c

*補足事項2
メールボックス復元処理の進捗状況については、以下の通り  Get-MailboxRestoreRequestStatistics コマンドにて出力される PercentComplete を確認します。100 (%) になっている場合は、完了です。

コマンド:
Get-MailboxRestoreRequest | % { Get-MailboxRestoreRequestStatistics $_.RequestGuid }

実行結果の例 :
Name             StatusDetail TargetAlias                    PercentComplete
----             ------------ -----------                    ---------------     
MBX0            Completed    MBX0-new_2015-12-07-2011-22577 100           
MBX1            Completed    MBX2-new_2015-12... 100          

手順 B. 復元したアクティブ メールボックスに対するライセンス付与およびインプレース保持の設定

1. ライセンスを付与します。
インプレース保持にてデータを保持するには、Exchange Online Plan 2 以上のライセンスが必要となります。

1-1. ライセンスの付与を実施する為に、ライセンス名とライセンスの残数を確認します。
Connect-MsolService コマンドでログインし、以下の Azure AD 管理コマンドを実行します。

コマンド:
Get-MsolAccountSku | FL ActiveUnits, ConsumedUnits, AccountSkuId

実行結果の例:
ActiveUnits   : 25
ConsumedUnits : 11
AccountSkuId  :  contoso:ENTERPRISEPACK

※ActiveUnits がライセンスの総数、ConsumedUnits がライセンスの使用数となります。
ActiveUnits から ConsumedUnits の数を引いた値が付与可能なライセンス残数となります。上記の例の場合は、残りのライセンス数は 14 となります。
また、AccountSkuId に表示される contoso:ENTERPRISEPACK とは、ライセンス付与時に指定するライセンス名として使用する値です。

以降の処理にて、新しい SMTP アドレスを持つユーザーとして一時的にライセンスを使用いたしますので、上記のライセンス残数の値をご確認頂けますようお願いいたします。

1-2. 以下の 3 行のコマンドにて、上記の手順で確認したライセンス名を入力し、それぞれのユーザーに対してライセンス付与を実施します。

$User = Get-Mailbox "<新規に作成したメールボックス名>" | select ExternalDirectoryObjectId
Set-MsolUser -ObjectId  $User.ExternalDirectoryObjectId -UsageLocation JP; `
Set-MsolUserLicense -ObjectId  $User.ExternalDirectoryObjectId -AddLicenses "contoso:ENTERPRISEPACK"

※ 上記 3 行目の "contoso:ENTERPRISEPACK" 部分は、お客様の AccountSkuId 名を適宜入力してください。

1-3. 実施後、念の為もう一度以下のコマンドを実行し、ユーザーの isLicensed プロパティが True になっていることを確認します。
Get-MsolUser -ObjectId  $User.ExternalDirectoryObjectId | FL IsLicensed

2. インプレース保持の設定をします
2-1. 以下のコマンドを実行し、特定のキーワードを UPN に含むユーザーを対象とした新しいインプレース保持を作成します。
$newSource = Get-Mailbox <新規作成したメールボックス名> | select -ExpandProperty LegacyExchangeDn
New-MailboxSearch -Name "インプレース保持の名前" -SourceMailboxes $newSource -InPlaceHoldEnabled:$true -EstimateOnly

2-2. 次に、以下のコマンドを実行し、見積もりの実行を行います。
Start-MailboxSearch "インプレース保持の名前"
* クエリーを指定していないことから、警告メッセージのポップアップが出力されますが、そのまま続行ください。
*上述の手順でインプレース保持を新しく作成するか、既存のインプレース保持の設定に追加しても問題ございません。

手順 C. 復元したアクティブ メールボックスと関連付けられている Azure AD アカウントの削除
1. メールボックスと Azure AD アカウントの削除
以下のコマンドにて、今回作成したユーザーの Azure AD オブジェクトを削除を実行します。
本コマンドの結果、Azure AD アカウントは削除済みユーザーとなり、メールボックスは非アクティブ メールボックスとなります。

1-1. 以下のコマンドを実行し、対象の ObjectId 一覧を取得します。
$User = Get-Mailbox "<新規作成したメールボックス名>" | select ExternalDirectoryObjectId,LegacyExchangeDn

1-2. 以下のコマンドを実行し、対象の Azure AD アカウントを削除済みのユーザーとします。このコマンドを実行してから数分後に、メールボックスは非アクティブ メールボックスとなります。
Remove-MsolUser -ObjectId $User.ExternalDirectoryObjectId -Force

2. Azure AD アカウントの完全削除
以下のコマンドにて、前記 1. で削除したアカウントの Azure AD アカウントを削除済みのユーザーの状態から完全に削除します。

2-1. 以下のコマンドを実行し、対象の Azure AD アカウントを削除済みのユーザーから完全に削除します。
Remove-MsolUser -ObjectId $User.ExternalDirectoryObjectId -Force -RemoveFromRecycleBin

2-2. 上記コマンドを実施後 10 ~ 20 分程度時間を置いた後に以下のコマンドを実行し、ExternalDirectoryObjectId の値が空となることを確認してください。
Get-Mailbox -InactiveMailboxOnly -Identity $User.LegacyExchangeDn | FL LegacyExchangeDn,ExternalDirectoryObjectId

2-3. 一連のコマンドの実施結果として、使用可能なライセンス数が元の状態に戻ったことを確認します。

コマンド:
Get-MsolAccountSku | FL ActiveUnits, ConsumedUnits, AccountSkuId

実行結果の例:
ActiveUnits   : 25
ConsumedUnits : 11
AccountSkuId  :  contoso:ENTERPRISEPACK

※ActiveUnits がライセンスの総数、ConsumedUnits がライセンスの使用数となります。ActiveUnits から ConsumedUnits の数を引いた値が付与可能なライセンス残数となります。

手順 D. 重複している非アクティブ メールボックス (復元の対象としたもの) のインプレース保持設定の削除
1. 重複していた非アクティブ メールボックスの完全削除
前記の手順 A. ~ 手順 C. までの処理にて、重複していた非アクティブ メールボックスのデータを持つ別の SMTP アドレスを持つ非アクティブ メールボックスが作成されております。
そのため、元の重複している非アクティブ メールボックスを以下の手順にて削除します。

1-1. 削除対象のメールボックスについて、以下のコマンドを実施し、ExternalDirectoryObjectId の値が空であることを確認してください。

Get-Mailbox -InactiveMailboxOnly -Identity "<削除対象のメールボックスの LegacyExchangeDn>" | FL Identity,LegacyExchangeDn,IsInactiveMailbox,EmailAddresses,InPlaceHolds,ExternalDirectoryObjectId

※ Identity には、一意な値となっております LegacyExchangeDn の値を用いてください。

1-2. 前記 1-1. の確認手順にて ExternalDirectoryObjectId の値が空でない場合には、Azure AD のオブジェクトが削除済みのユーザーとして残存していることを示しております。以下のコマンドを実施して、Azure AD のオブジェクトを削除済みユーザーから完全に削除してください。

Remove-MsolUser -ObjectId "<1-1. の結果出力された ExternalDirectoryObjectId>" -Force -RemoveFromRecycleBin

1-3. 削除対象のメールボックスをインプレース保持から削除します。
1-3-1. 指定したメールボックスをソースメールボックスのリストから除外します。
$Sources = Get-MailboxSearch "<インプレース保持の名前>" | select -ExpandProperty Sources
$LDN = Get-Mailbox -IncludeInactiveMailbox "<メールボックス名>" | select -ExpandProperty LegacyExchangeDN
$Sources = $Sources | ? {$_ -ne $LDN}

1-3-2. メンバー情報を更新した後、改めて設定コマンドを実行します。
Set-MailboxSearch "<インプレース保持の名前>" -SourceMailboxes $Sources

1-3-3.インプレース保持に設定されているユーザーを表示名で一覧表示します。
Get-MailboxSearch "<インプレース保持の名前>"  | select -ExpandProperty sourcemailboxes

※ 上記操作実施後、非アクティブ メールボックスが実際に削除されるまでに時間がかかる場合がございます。

2. 重複していた SMTP アドレスの重複が解消されたことの確認
前記までの手順の結果として、SMTP アドレスの重複が解消されたことを以下のコマンドにて確認してください。1 行目の “[対象メールアドレス]" を重複確認したいメール アドレスに変更して実行ください。

---- ここから ----
$address = “[対象メールアドレス]"
$temp = "*smtp:" + $address + "*"
$results = @()
$results += Get-Mailbox -Identity $address -IncludeInactiveMailbox -ResultSize Unlimited | Where-Object {$_.EmailAddresses -like $temp}
Write-Host ""
Write-Host "Email Address :" $address
Write-Host "Count :" $results.Count
Write-Host "Details :"
$results | fl Identity,LegacyExchangeDn,IsInactiveMailbox,EmailAddresses,InPlaceHolds,ExternalDirectoryObjectId
---- ここまで ----

出力結果の "Count :" の数が 1 であれば正常に手順が完了しております。
また、"Count :" の数が 1 でない場合も、前記 1-3. の処理が完了していない可能性もございますので、その場合にはしばらく時間をおいて確認してください。