Share via


Exchange 2013 で Get-CalendarDiagnosticLog コマンドを実行するとエラーが発生する

こんにちは、Exchange Server サポートの小間です。
今回は Exchange 2013 で確認されている Get-CalendarDiagnosticLog コマンドの問題を紹介します。

予定表アイテムに関する診断ログを取得する際に Get-CalendarDiagnosticLog コマンドが利用できます。
Get-CalendarDiagnosticLog コマンドの LogLocation パラメーターを指定すると、ログをファイルに書き出すことができます。

LogLocation パラメータが指定された Get-CalendarDiagnosticLog コマンドを実行する際、件名が空 (ブランク) の予定表アイテムに関するログが含まれていると、コマンドでエラーが発生します。
実際に件名が空の場合以外にも、件名を取得する処理の中で想定していないエラーが発生した場合は件名を空として扱うように実装されているため、結果としてコマンドの実行がエラーになります。

----- エラー内容 -----
警告: 予期しないエラーが発生しました。ワトソン博士のダンプを生成しています。値を Null にすることはできません。
パラメーター名:fileName
値を Null にすることはできません。
パラメーター名:fileName
+ CategoryInfo : NotSpecified: (:) [Get-CalendarDiagnosticLog], ArgumentNullException
+ FullyQualifiedErrorId : System.ArgumentNullException,Microsoft.Exchange.Management.StoreTasks.GetCalendarDiagnosticLog
+ PSComputerName : <コンピューター名>
----- ここまで -----

この問題は Exchange サーバーの実装に問題があるために発生いたします。
既に Exchange Online や Exchange 2016 CU3 以降では修正されており、件名が空の予定表アイテムに関するログが含まれていてもエラーが発生しないように修正されています。
現在、Exchange 2013 にも同様の修正を行うことができないか、開発部門にて検討が行われています。

Exchange 2013 環境では根本的な回避策がないため、ログをファイルに書き出す必要がある場合は暫定的な回避策として、LogLocation パラメーターを使用せずにログをコンソールに出力し、内容をテキスト ファイルに手動で保存するなど行っていただきますようお願いいたします。
もしくは Subject パラメーターを指定して、特定の件名を持つ予定表アイテムの情報のログのみを取得していただきますようお願いいたします。

 
- 2017/11/16 Update
Exchange 2013 に対して修正可否の検討を弊社開発部門にて進めておりましたが、大変恐縮ですが今回は修正を行わないこととなりました。
Exchange 2013 と Exchange 2016 の内部実装の違いにより同様の修正を行うことが困難であり、新たな修正方法を検討した場合は修正箇所以外に影響が生じる可能性があるため、この問題が生じることによるお客様ビジネスへの影響などを総合的に判断を行い、修正を行わないこととなりました。

この問題により、Exchange 2013 では件名がブランクである予定表アイテムのログを Get-CalendarDiagnosticLog -LogLocation で EML ファイルに保存することは出来ません。
先述の通り、LogLocation パラメーターを使用せずにログをコンソールに出力し、内容をテキスト ファイルに手動で保存するなど行っていただきますようお願いいたします。

なお Get-CalendarDiagnosticLog コマンドの利用シナリオとしては、Get-CalendarDiagnosticAnalysis コマンドと組み合わせて予定表データの解析を行うケースが一般的に考えられます。
以下のようにコマンドを実行することで、件名がブランクである予定表アイテムに関するログも含めて Get-CalendarDiagnosticAnalysis コマンドで取得することが可能ですので、トラブルシューティングなどの際の参考になりましたら幸いです。
コマンドは 2 行です。

$Logs = Get-CalendarDiagnosticLog -Identity <ユーザー名>
$Logs | %{Get-CalendarDiagnosticAnalysis -CalendarLogs $_ -DetailLevel Advanced > "<出力ファイル名>"}

実行例) User01 の予定表アイテムのログを、C:\temp 配下に予定の GUID をファイル名として出力する
$Logs = Get-CalendarDiagnosticLog -Identity User01
$Logs | %{Get-CalendarDiagnosticAnalysis -CalendarLogs $_ -DetailLevel Advanced > "C:\temp\$($_.CleanGlobal
ObjectId).csv"}

ご不便をおかけしますが、なにとぞよろしくお願いいたします。

※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。