読者です 読者をやめる 読者になる 読者になる

Exchange 学習帳

ExchangeやOffice 365の備忘録です。

メッセージ追跡ログまとめ

こんにちは!

今回はExchangeのメールトラブル対応に欠かせない、メッセージ追跡ログ(MessageTrackingLog)に関する情報をまとめます。


まず、メッセージ追跡ログ全般について理解するにはこちら。
EventIDと、そのイベントの内容がまとまっているので、トラブルの度に一度は開いてます。
メッセージ追跡:
https://technet.microsoft.com/ja-jp/library/bb124375(v=exchg.150).aspx


メールフローと、それに対応して記録されるメッセージ追跡ログをまとめた図を作成しました。

f:id:tkd-o365:20160628152223p:plain

ソースはサポートチームのブログです。
Exchange 2013でメッセージを追跡する:
https://blogs.technet.microsoft.com/exchangeteamjp/2015/03/16/exchange-2013-13/

この図は、メールが正しく配送されないというトラブル以外にも、
メールは正しく配送されるがメッセージ追跡ログが残っていない、というトラブルにも有用です。

メッセージ追跡ログが残っていないトラブルについては、別の機会にまとめようと思います。


メッセージ追跡ログをCSVファイルに出力する方法についてはこちら。
メッセージ追跡ログを CSV ファイルに出力する方法:
https://blogs.technet.microsoft.com/exchangeteamjp/2015/11/17/csv/

メッセージ追跡ログはExchange管理センター(EAC)からでも参照できますが、
トラブルシュートにはやはりPowerShellで取得するのが望ましいでしょう。
情報量が断然違います。


とりあえず、これらの情報があればメール配信に関するトラブルの糸口は掴めるのではないでしょうか。

それでは今回はこの辺りで。

皆様が遭遇したトラブルなど、コメントいただけると勉強になります。

PowerShellを使いこなしたい② ファイル出力編

前回からだいぶ日が空いてしまいました。

PowerShellを使いこなしたい① 超基礎編

PowerShellを使いこなしたいシリーズ、第2弾です。

PowerShellでコマンドを入力すると、当然ながら出力はPowerShellに表示されます。
自身で完結する作業であればそれでも問題無いかもしれませんが、
設定変更のログやエビデンスを残したり、
設定変更前の情報をファイルに残しておいたり、
取得した情報を別のソフトで加工、分析したりしたい場面に必ず遭遇するかと思います。

そこで今回は「ファイル出力編」と題して、コマンドで取得した結果を出力する方法をまとめます。
網羅はできないですが、この5つさえ習得すればなんとかなるのでは、と思ってます。


●[Start-Transcript]コマンド
コマンドの入出力を全てテキストファイルに記録するコマンドです。
入力したコマンドがそのまま記録されるので、作業のログに最適です。

Start-Transcript

と入力して実行すると、既定で C:\User\%UserName%\Documents にテキストファイルを作成して記録を開始します。
保存先を指定したい場合は、

Start-Transcript C:\Temp\20160617_Transcript.txt

のようにスペースを空けて、ファイルを絶対パスで指定します。

覚えておきたいのが -Append パラメーターです。

Start-Transcript C:\Temp\20160617_Transcript.txt -Append

このパラメーターを指定すると、指定したテキストファイルの一番下に追加して記録を開始します。
(-Appendを指定しない場合、同じ名前のファイルがあると上書きして記録を開始してしまいます)

記録の終了は[Stop-Transcript]コマンドです。


●[>FileName.txt]
テキストファイルに出力する方法はもう1つあります。

Get-Mailbox -Identity User01 >C:\temp\20160617_User01.txt

と入力すると、">" の前までのコマンドを、テキストファイルに出力します。

あっ、この出力、テキストで欲しいな、なんてときは、
[↑]キーで直前のコマンドを呼びだして、これを書き足してあげましょう。


●[Export-Csv]コマンド
最もよく使うコマンドのひとつが、[Export-Csv]です。
コマンドの結果をCSVファイルで出力します。
メールの配信ログなど、情報量が多いときに用いることが多いです。

-Encoding パラメーターで文字化けを防ぎ、
-NoTypeInformation パラメーターで先頭行に型の情報を入れないようにします。

Get-Mailbox -Identity User01 | Export-CsV -Path C:\temp\20160617_User01.csv -Encoding UTF8 -NoTypeInformation

変数からパイプ処理が可能なので、

$Output = Get-Mailbox -Identity User01
$Output += Get-Mailbox -Identity User02
$Output | Export-CsV -Path C:\temp\20160617_User.csv -Encoding UTF8 -NoTypeInformation

こうして、まとめて1つのファイルに出力することができます。便利。


●[Export-CliXml]コマンド
[Export-Csv]と同じか、それ以上に有用なのが、[Export-CliXml]です。
文字通り、Xmlファイルに出力するコマンドです。

Get-Mailbox -Identity User01 | Export-CliXml -Path C:\temp\20160617_User01.xml

なぜ、Xmlファイルで出力するのかというと、
このファイルから情報を取り出すときに、オブジェクトとして扱い、
PowerShellコマンドを使用することができるからです。

まず、変数にインポートします。

$File = Inport-CliXml -Path C:\temp\20160617_User01.xml

この$Fileを以下のように扱うことが可能なんです。

$File | fl
$File | ?{$_.Alias -eq "User01"}
$File | Set-Mailbox -UseDatabaseQuotaDefaults $False

つまり、使い慣れたPowerShellのコマンドで操作ができます。
設定変更する前の状態をXmlファイルに出力しておけば、
変更前の値を簡単に参照したり、そこから簡単に戻したりすることもできます。


●[ | Clip]
ファイルではなく、コマンドの出力をクリップボードにコピーします。

Get-Mailbox -Identity User01 | Clip

と使います。
入力したコマンドの出力がそのままコピーされるので、
以下のように出力を整形してあげてください。

Get-Mailbox -Identity User01 | fl | Clip
Get-Mailbox -Identity User01 | fl Alias,SamAccountName -AutoSize | Clip


それでは、今回はこの辺りで。
質問やPowerShellシリーズでリクエストがあればコメントいただければと思います。

今回の参考情報です。

Start-Transcript:
https://technet.microsoft.com/ja-jp/library/hh849687.aspx

Export-Csv
https://technet.microsoft.com/ja-jp/library/hh849932.aspx

Export-CliXml について:
https://blogs.technet.microsoft.com/exchangeteamjp/2015/08/23/export-clixml/

PowerShellを使いこなしたい① 超基礎編

こんにちは、4回目の記事です。

突然2日連続です。

 

オンプレ/Online問わず、Exchange環境の構築、運用にPowerShellの利用が不可欠です。
膨大なオブジェクトの作成、編集や、そもそもGUIでは管理できない項目もあります。

そこで今回は、PowerShellを使うときに覚えておきたい基本的な機能や、個人的によく使う機能をまとめてみました。


●インテリセンス(補完)機能
PowerSHellでは途中までコマンドを入力して[Tab]キーを押すと、自動的にコマンドを補完してくれます。

例えば、

Get-Mail

まで入力して[Tab]キーを押下すると、

Get-Mailbox

と補完します。


パラメーターも同様に補完してくれます。

Get-Mailbox -id

まで入力して[Tab]キーを押下すると、

Get-Mailbox -Identity

と補完します。

これだけでコマンドの入力が格段にスピードアップします!


パイプライン
PowerShellでは、あるコマンドで取得した結果を、別のコマンドに渡すことができます。
これを用いると、複数のオブジェクトに対して、更に別の結果を出力させたり、設定変更を加えたりすることができます。

書き方は、コマンドとコマンドの間に「|」をいれるだけです。

よく使うのは、メッセージ追跡ログを取得するときです。


Get-TransportService | Get-MessageTrackingLog -Recipients "user01@contoso.com" -Start "2016/04/07" -ResultSize Unlimited


Get-MessageTrackingLogコマンドは、既定ではコマンドを実行したサーバーに保存されているログのみを対象とします。
ですが、ログはトランスポートサービスの処理が行われたサーバーに保存されるため、必ずしも1つのサーバーに全てのログが保存されるとは限りません。

そこで、Get-TransportServiceコマンドで全てのトランスポートサービスを取得して、パイプで渡します。
こうすることで、存在する全てのメッセージ追跡ログを対象にGet-MessageTrackingLogコマンドを実行できます。

以下は、全てのユーザーメールボックスに対して、仕訳ルールの容量を256KBに変更するコマンドです。


Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize Unlimited | Set-Mailbox -RulesQuota 256KB

 

●[Format-List]コマンド
Get-Mailboxをはじめ多くのコマンドは、結果を表(Table)形式で出力します。
この場合、表示するパラメーターが制限されたり、値の一部しか表示されなかったりします。

詳細情報を表示するには一覧(List)形式で表示させます。
一覧形式で表示するには、結果をFormat-Listコマンドにパイプで渡すだけです。


Get-Mailbox -Identity "User01" | Format-List


FormatListコマンドにはAliasが設定されていますので、以下でも同じ出力が得られます。便利。


Get-Mailbox -Identity "User01" | fl


なお、パラメーターを絞って表示させるには、以下のように入力します。
パラメーターをカンマ区切りで指定するだけです。


Get-Mailbox -Identity "User01" | fl Alias,DisplayName,Emailaddresses,ServerName,Leg*


ちなみに、パラメーター指定にはワイルドカード(*)も使えます。
[Leg*]の場合、[LegacyExchangeDN]が表示されます。


●[Format-Table]コマンド
Format-Listは一覧(List)形式で表示するコマンドでした。
一方、表(Table)形式で表示するよう明示的に指定することもできます。


Get-Mailbox -Identity "User01" | Format-Table


このコマンドにもAliasがあります。


Get-Mailbox -Identity "User01" | ft


もちろん、パラメーター指定もできます。


Get-Mailbox -Identity "User01" | ft Alias,DisplayName,Emailaddresses,ServerName,Leg*


幅を自動調整するには、-Autoパラメーターです。


Get-Mailbox -Identity "User01" | ft Alias,DisplayName,Emailaddresses,ServerName,Leg* -Auto

 

それではこの辺りで。
今回は超基本的な内容ばかりになってしまいました。
このPowerShellシリーズは今後も続けていきます。
次回は中級編な内容にする予定です。

♯改めて文字に起こしてみると、長い。

今回の参考情報です。

Windows PowerShell でのパイプ処理とパイプライン
https://technet.microsoft.com/ja-jp/scriptcenter/powershell_owner04.aspx

Format-List コマンドレットの使用:
https://technet.microsoft.com/ja-jp/library/ee176830.aspx

Format-Table:
https://technet.microsoft.com/ja-jp/library/hh849892.aspx

 

予定表アイテムのログを取得する

3回目の記事です。
ご無沙汰です、、、

本日は予定表のログについてです。

Exchangeの運用に携わっているとよく予定表のトラブルに出会います。

 ・Outlookから編集した内容が反映されていない
 ・昨日作成した予定表アイテムが消えてしまった
 ・削除したはずの予定表アイテムが復活している

これらはOutlookをキャッシュモードで運用していたり、
自身以外のユーザーに対して[所有者]の権限を与えたりしていると起こる可能性があります。

Exchange Serverではメールボックスごとに予定表アイテムの作成/編集/削除のログを保持しています。
このログを参照することで、サーバー上で消えてしまったのか、
そもそもOutlookからサーバーに同期する前に問題が起こったのかなどを
切り分けることができるかと思います。

このログを参照するには、2つのコマンドを用います。
まず、保存されている予定表のログをmsg形式で出力します。

 

Get-CalendarDiagnosticLog -Identity <ユーザーのAlias> -StartDate "yyyy/MM/dd" -LogLocation <ログの出力先>

 

例:
Get-CalendarDiagnosticLog -Identity "user01" -StartDate "2016/04/06" -LogLocation "C:\temp"

 

このコマンドを実行するとLogLocationで指定したフォルダーに[<ユーザーのDisplayName>]フォルダーが作成され、そのフォルダー内にmsg形式のログが保存されます。

msg形式のログを次のコマンドで分析して、結果をCSVファイルに出力します。

 

Get-CalendarDiagnosticAnalysis -LogLocation <msg形式のログが保存されているフォルダーパス> -DetailLevel Advanced > <出力先ファイルパス>

 

例:
Get-CalendarDiagnosticAnalysis -LogLocation "C:\temp\User01" -DetailLevel Advanced >C:\temp\user01.csv

 

このコマンドを実行すると、<出力先ファイルパス>で指定したファイルパスにCSVファイルが生成されます。

CSVファイルには、ログを分析した結果として、予定表アイテムを作成、編集、削除、その内容などあらゆる情報が記載されます。

ログの期間を絞ればコマンドの実行自体にさほど時間はかからないので、一度実行して内容を確認するとわかりやすいと思います。

それでは今日はこの辺りで。
♯今月中にもうひとつくらい記事を書きたい

今回の参考情報は以下です。

Get-CalendarDiagnosticLog:
https://technet.microsoft.com/ja-jp/library/dd638102(v=exchg.150).aspx

Get-CalendarDiagnosticAnalysis:
https://technet.microsoft.com/ja-jp/library/jj552406(v=exchg.150).aspx

Troubleshooting Calendar issues with Exchange server
http://msexchangeguru.com/2015/05/20/troubleshooting-calendar-issues-with-exchange-server/

削除済みメールボックスの保持期間を変更する

Exchange Server 2013/2016では削除されたメールボックスをメールボックスデータベース内に一定期間保持します。

その期間中はメールボックスを無効な状態のまま保持したのち、設定された期間が経過すると自動的に完全に削除されます。

削除済みメールボックスの保持期間は既定で30日です。

現在設定されている保持期間は以下のコマンドで取得できます。

 

Get-MailboxDatabase -Server <サーバー名> |fl MailboxRetention

 

組織内の全てのメールボックスデータベースに対して、保持期間を変更したい場合は以下のコマンドを実行します。

 

Get-MailboxDatabase | Set-MailboxDatabase -MailboxRetention <保持期間>

 

<保持期間>は、dd.hh:mm:ssの形式で指定します。

例えば60日と12時間に設定したい場合は、以下のように入力します。

 

Get-MailboxDatabase | Set-MailboxDatabase -MailboxRetention 60.12:00:00

 

設定可能な最大値は24855日です。

 

なお、以上のコマンドはオンプレミスのExchange Serverのみで実行可能です。

Office 365(Exchange Online)でも規定の保持期間は30日ですが、

このコマンドで保持期間を変更することはできません。

その代わりOffice 365では[非アクティブなメールボックス]という概念があります。

詳しくはこちら。

 

Exchange Online でユーザー メールボックスを削除または復元する:

https://technet.microsoft.com/ja-jp/library/dn186233(v=exchg.150).aspx

 

それでは今日はこの辺りで。

今回の記事に関する情報は以下で確認できます。

 

削除されたメールボックスの接続または復元:

https://technet.microsoft.com/ja-jp/library/jj863438(v=exchg.150).aspx

Get-MailboxDatabase:

https://technet.microsoft.com/ja-jp/library/bb124924(v=exchg.150).aspx

Set-MailboxDatabase:

https://technet.microsoft.com/ja-jp/library/bb123971(v=exchg.150).aspx

Outlook 2013のアドレス帳の検索結果が異なる

「Exchange学習帳」と題しておきながら、近頃クライアント寄りの学習が多く、初投稿がOutlookについての記事になってしまいました。

 
さて、第1回目のテーマはOutlookのアドレス帳についてです。
Outlookでメールの宛先を指定するときは、名前やフリガナで検索をかけて選択するのがほとんどだと思います。
 
しかし、同じExchange組織、[グローバルアドレス一覧]を選択している、検索するワードも同じ、検索対象も[その他のフィールド]になっている、、、にも関わらず検索結果が異なって表示される場合があります。
 
これは、検索結果のソート(並び替え)方法の違いが原因となっている場合があります。
Outlookでは、
 
 ・OAB(オフラインアドレス帳)を参照→[フリガナ]でソート
 ・GAL(グローバルアドレス帳)を参照→[名前]でソート
 
というルールでソートされるのが仕様上の動作となります。
(Outlook 2010でも同様の仕様を確認しています)
 
Outlookのモードの違いや(キャッシュモードorオンラインモード)、
Outlook利用開始直後でOABが生成されていない、など、
ユーザーによって参照先が異なる場合に、検索条件は同じでも結果が異なって見えます。
 
特に[名前]でソートしている場合は、登録されている[表示名]によっては
全く意図しない結果となってしまうことがあるので注意が必要です。
 
なお、現在選択している[アドレス帳]がOABとGALのどちらを参照しているかは、
検索画面で[アドレス帳]プルダウンメニューの中を右クリック-[プロパティ]で確認できます。
[現在のサーバー]にローカルの保存先が表示されている場合はOAB、サーバー名が表示されている場合はGALを参照しています。
 
これからも今回のような、細かいけど気になることをまとめていきますので、ご参考になればと思います。