Partager via


EventHistory を活用してメール アイテムに加えられた操作 (Store Event) を追跡する!

今回は以下の英語の Blog にて公開している受信したアイテムが意図せず移動している、削除されたといった場合のデータベース上の EventHistory テーブルを使用した調査方法について、追加の情報をご案内いたします。
※以降の説明は、Exchange 2010 以上のバージョンを基に説明しております。

Title: Adventures in querying the EventHistory table
URL: https://blogs.technet.com/b/exchange/archive/2013/06/24/adventures-in-querying-the-eventhistory-table.aspx

調査の前にまず、アイテムが意図せず削除された場合にご確認いただきたい内容については、下記 Blog にてご案内しております。

Title: 突然アイテムが消えた!場合の対策
URL: https://blogs.technet.com/b/exchangeteamjp/archive/2015/04/15/3648071.aspx

しかしながら、お客様よりお寄せいただくお問い合わせの中には、上記 Blog の内容をすべて確認した場合にも説明ができない現象が稀にございます。
原因究明に至ることを保証するものではありませんが、問題のメールボックスが存在するデータベース上で発生する Store Event (アイテムの作成/変更/移動/削除) の記録である EventHistory テーブルを調査することで、ヒントが得られる場合があります。

本 Blog では、お客様にご案内の実績のある EventHistory テーブルの確認手順を以下にご紹介いたします。
メールボックス内の特定のアイテムに関する調査で行き詰った際などに、アイテムへ操作を行ったのが Outlook なのか、OWA なのか、それとも ActiveSync なのかといったことは明確になるため、何か手がかりとなるかもしれません。

==========================================================================
EventHistory テーブルを出力し、Store Event を確認する
==========================================================================
既定では EventHistory テーブルは直近 7 日間の Store Event のみ保持しております。
※ Get-MailboxDatabase コマンドにおける、EventHistoryRetentionPeriod パラメーターにて保持期間を確認できます。

- 項目
1) サーバー側での EventHistory の採取
2) クライアント側での EntryId の確認
3) Store Event の調査

- 手順
----------------------------------------
1) サーバー側での EventHistory の採取
----------------------------------------
1. Exchange 管理シェルを起動します。
2. 次のコマンドを 1 行ずつ実行します。
指定したユーザーの指定した日付以降の Store Event が記録された EventHistory テーブルを、CSV ファイルとして出力します。

Add-PSSnapin Microsoft.Exchange.Management.Powershell.Support
$db = (get-mailbox "対象メールボックス名").database
$mb=(get-mailbox "対象メールボックス名").exchangeguid
Get-DatabaseEvent $db -MailboxGuid $mb -resultsize unlimited | ? {$_.documentid -ne 0 -and $_.CreateTime -ge  "<MM/DD/YYYY>"} | export-csv <出力先ファイル名>

<<< 実行例 >>>
Add-PSSnapin Microsoft.Exchange.Management.Powershell.Support
$db = (get-mailbox User01).database
$mb=(get-mailbox User01).exchangeguid
Get-DatabaseEvent $db -MailboxGuid $mb -resultsize unlimited | ? {$_.documentid -ne 0 -and $_.CreateTime -ge  "03/10/2016"} | export-csv c:\temp\EventHistory.csv

----------------------------------------
2) クライアント側での EntryId の確認
----------------------------------------
意図せず削除されたアイテムの EntryId を、以下のいずれかの方法で確認します。

A. MFCMAPI ツールを使用する方法
===============================
Outlook がインストールされた環境にて作業する場合には、本手順によりアイテムの EntryId が確認可能です。

1. 対象ユーザーの Outlook プロファイルを、Exchange キャッシュ モード オフの設定で作成します。
2. 以下のサイトより MFCMAPI をダウンロードします (本ブログ執筆時点での推奨バージョンである点、ご留意ください)。

Title : MFCMAPI (April 2017 Release)
URL : https://github.com/stephenegriffin/mfcmapi/releases
※ "MFCMAPI ~ bit executable - ~" をクリックしてダウンロード

<ファイル名>
- 32 bit 版 Office 向け : MFCMAPI 32 bit executable - April 2017 Release (17.0.17099.01)
- 64 bit 版 Office 向け : MFCMAPI 64 bit executable - April 2017 Release (17.0.17099.01)

※ MFCMAPI は Outlook のプロファイルを使用して Exchange のメールボックスにアクセスいたしますので、ダウンロードしたファイルは手順 1 にて作成された Outlook プロファイルが存在するクライアントに配置してください。

3. MFCMAPI.exe を起動します。
4. ダイアログが表示されたら [OK] をクリックします。
5. [Session] メニューの [Logon...] をクリックします。
6. 手順 1 で用意したプロファイルを選択し [OK] をクリックします。
7 該当のメールボックスをダブル クリックします。
8. [Root Container] - [Top of Information Store] とツリーを展開していき、対象アイテムのあるフォルダーをダブル クリックします。
9. 上段から、対象アイテムを選択し、下段の Property name に PR_ENTRYID が含まれるエントリを探し、ダブル クリックします。
10. Binary 欄にあるテキストをメモ帳などに保存します (確認したい EntryID に該当します)。
11. MFCMAPI を終了します。

B. EWS Editor を使用する方法
===============================
Outlook がインストールされていない環境の場合は、本手順により確認します。

1. 以下の URL より、EWS Editor をダウンロードします。

Title: EWSEditor
URL: https://github.com/dseph/EwsEditor/releases ※ "EWSEditor.~.Bin.zip" をクリックしてダウンロード

2. ダウンロードした zip を展開し、EWSEditor.exe を起動します。
3. [File] -> [Open Default Exchange Service] へ移動します。

※クライアントがドメイン参加の端末でない場合や Autodiscover を使用できない環境の場合
[File] -> [New Exchange Service] へ移動し、EWS への接続情報を手動で入力する必要がございます。

4. 確認プロンプトが表示されますので、"はい" を押します。
5. [MsgFolderRoot] - [インフォメーション ストアの先頭] - [<該当のアイテムが存在するフォルダー>] をダブル クリックします。
6. 上段から、対象アイテムを選択し、下段の Name が ID であるエントリを探し、ダブル クリックします。
7. [Value (Default)] タブに表示される UniqueId: の下に表示されている値をコピーします。
※ "UniqueId:" および 末尾の "Changekey:: xxxxx" はコピーしません。

8. EWSEditor のメニューより [Tools] を開き、[ConvertId...] をクリックします。
9. 以下のように入力し、[Convert] をクリックします。

- Original Format: EwsId
- Original Identifier: 手順 7 で確認した UniqueId
- Identifier Mailbox: ユーザーの SMTP アドレス (例: test01@contoso.local)
- Requested Format: HexEntryId

10. "Converted Identifier" に表示された値をメモ帳などに保存します (確認したい EntryId に該当します)。
11. EWSEditor を終了します。

----------------------------------------
3) Store Event の調査
----------------------------------------
1. 前述の手順 1) で出力した EventHistory の CSV ファイルを開き、前述の手順 2) で確認した EntryId を検索します。
2. 検索した EntryID に合致するレコードの DocumentId を確認し、同じ DocumentId を含むレコードを抽出します。

※ EntryId はフォルダーの移動ごとに変化しますが、DocumentId は対象アイテムについては常に一定のため、同じ DocumentId のレコードを確認することで、対象アイテムの操作履歴を確認できます。

3. EventName から、対象アイテムに対して行われた操作が、ClientCategory からは操作元を確認できます (例えば、OWA の場合は OWA と記録されますが、Outlook の場合は、MOMT と記録されます)。

<Store Event の記録例>
以下は、Outlook にて対象アイテムを受信トレイから削除済みアイテムに移動した際の記録例です。
受信トレイから移動 (ObjectMoved)、削除され (ObjectDeleted)、削除済みアイテム フォルダー内にアイテムが作成 (ObjectCreated) されたと判断できます。

  CreateTime,EventName,ClientCategory,DocumentId
2016/3/16 0:35,ObjectMoved,MOMT,4362
2016/3/16 0:35,ObjectDeleted,MOMT,4362
2016/3/16 0:35,ObjectCreated,MOMT,4362

※ CreateTime は GMT で記録されますため、日本のタイムゾーンと考える際は +9 時間します。

調査対象のアイテムがメールボックス内に存在せず、EntryId が分からない場合は、特定のアイテムについての挙動を確認することは残念ながらできません。
しかしながら、問題の発生時間帯のデータベースの状況や、お手元の検証環境で想定される動作が得られた際の Store Event とを比較することで何かヒントが得られるかもしれません。

今後とも弊社サポート Blog をどうぞ宜しくお願いいたします。