Exchange Management Shell、 Exchange Management Console が使用できない !
こんにちは。Exchange CRT の竹田です。
今回は、Exchange 2010 にて、トレースを採取する際の注意点をご案内します。
Exchange 2007 および 2010 では、トレースを採取することで、問題の現象が発生している際のより詳細な動きが確認でき、問題解決へ向けての更なる調査に有効な情報の採取ができるようになります。
これまでに、Exchange 2007 および 2010 のお問合せをいただいたことがあるお客様の中には、担当のサポート エンジニアからこのトレースの採取の依頼があったり、また問い合わせの際に採取された方もいると思います。
今回は、このトレース制御を Exchange 2010 で実行する際の注意点として、以下の技術情報として公開されている内容についてご案内します。
TITLE : An error message is generated in Exchange Server 2010 when you use Exchange Troubleshooting Assistant
URL : https://support.microsoft.com/kb/979801/en-us
- 注意
トレースを採取する際に、下図のように "デバッグ" にチェックが入っていて、かつ、コンポーネントを選択する際に、ADProvider の ClientThrottlingState のタグを有効にすると、w3wp.exe (MSExchangePowerShellAppPool) がクラッシュします。どちらかのチェックが入っていなければ問題ないです。
なお、これらのタグを有効にした状態でトレースを採取すると、トレースの採取を停止していても現象が発生し続けるため、要注意です!
w3wp.exe (MSExchangePowerShellAppPool) がクラッシュすると、Exchange Management Shell ならびに Exchange Management Console が利用できなくなってしまいます。<:o:p>
例えば、Exchange Management Shell から、コマンド レッドを実行すると、以下のようなエラーが表示され実行することができません。<:o:p>
---------- ここから ----------
リモート サーバーからのデータの処理が失敗し、次のエラー メッセージが返されました。クライアントは、要求で指定された接続先に接続できません。
接続先のサービスが実行されていて、要求を受け付けられる状態であることを確認してください。
接続先で実行されている WS-Management サービス (通常は IIS または WinRM) に関するログとドキュメントを参照してください。
接続先が WinRM サービスの場合は、リモート ホスト上で次のコマンドを実行して、WinRM サービスを分析および構成してください: "winrmquickconfig"詳細については、about_Remote_Troubleshooting のヘルプ トピックを参照してください。
+ CategoryInfo : OperationStopped: (System.Manageme...pressionSyncJob:PSInvokeExpressionSyncJob) []、PSRem
otingTransportException
+ FullyQualifiedErrorId : JobFailure
---------- ここまで ----------
また、イベント ログには、アプリケーション ログとシステム ログに以下の内容が記録されます。
《アプリケーション ログ》
《システム ログ》
w3wp.exe は、ワーカープロセスなので、クラッシュしてもリサイクルされますが、コマンド レットが実行されるたびにクラッシュしてしまうため、結果として Exchange Management Shell ならびに Exchange Management Console が利用できません。
上記の状態になると、トレース制御を停止しても、引き続き上記エラーが表示され管理ツールからの Exchange Server の管理ができません。
- 管理ツールと IIS の関係
まずはじめに、Exchange 2010の Exchange Management Shell では、Exchange 2007 のようにローカル シェルを使用しないようになり、リモート シェルを利用していることをお話しします。
Exchange Management Shell を起動すると、PowerShell client として動作し、PowerShell Server として検出される最も近い Exchange 2010 にWindows Remote Management 2.0 (WinRM2.0) を通じて接続されます。
ほとんどの場合がローカル (自身) に接続しますが、このときも WinRM 2.0 に接続されるため、結果としてリモートで起動することになります。
また、PowerShell と上記で説明した WinRM は、IIS のワーカープロセスである w3wp.exe の中で実行されます。
そのため、w3wp.exe がクラッシュすると、Exchange Management Shell ならびに Exchange Management Console が利用できなくなります。
ちなみに、Exchange 2010 がインストールされている環境で、IIS マネージャーから確認すると "PowerShell" という仮想ディレクトリが作成されており、アプリケーション プールには "MSExchangePowerShellAppPool" も作成されています。
- 回避するためには
この現象を回避するには、サポート技術情報 979801 にも記載されている通り、Exchange 2010 RU4 を適用 することで解消します。
しかし、本番環境にて運用しているサーバーに対して、RU4 の適用がすぐにはできないという場合も多々あると思います。
そのような場合は、以下の点に注意して、再度トレースを採取することで回避できます。
トレース タグの設定で、トレースの種類から "デバッグ" のチェックを外すか、Trace Tags から "ClientThrottlingState" を外して、トレースを採取することで回避できます。
上記のように再度トレースを採取することで、w3wp.exe (MSExchangePowerShellAppPool) のクラッシュも発生しなくなり、これまでどおり管理ツールが利用できます。
本現象の状態になると、Exchange Management Console の起動ができないため、[ツールボックス] から "パフォーマンストラブルシューティング ツール" の起動ができません。
しかし、トレースの採取は、必ずしも Exchange Management Console から実行する必要はなく、[ファイル名を指定して実行] から、"ExTRA" と入力して [OK] をクリックすることで、"Exchange Troubleshooting Assistant" を起動することができ、トレースの採取を実行することができます。
なお、お問合せ対応中に、担当のサポート エンジニアから Exchange 2010 にてトレースの取得をご依頼させていただく際は、上記内容を踏まえた手順をご案内させていただきますので、ご安心いただければと思いますが、お客様にて実行する際には、十分ご注意いただければと思います。
もし、今後の運用していく中で、Exchange Management Console や Exchange Management Shell による管理機能がどんどん利用できなくなるような現象に陥った際には、今回ご案内した内容に合致している可能性が考えられるので、一度、イベントログなどを確認してみてください。
ちなみに …
トレースを採取する一般的な手順は、以下ですで。
1.Exchange 2010 へ、管理者アカウントにてログオンします。
2.[スタート] - [ファイル名を実行] をクリックし、[名前] の入力ボックスに "extra" と入力し [OK] をクリックします。
3.Exchange Troubleshooting Assistant が起動しますので、[タスクを選択する] をクリックします。
4.[トレース制御] をクリックします。
5.以下のメッセージが表示されますので [OK] をクリックします。
6."トレース ファイルの場所" と "トレース ファイルの名前"、"トレースファイルの最大サイズ" を任意の場所、名前、サイズに変更します。
7.[手動トレース タグを設定する] をクリックする。
8."トレースの種類" の中から、必要な項目にチェックを入れます。
9."Components to Trace" の中から、必要なコンポーネントにチェックを入れます。
10.各コンポーネントのタグを、"Trace Tags" の一覧から選択しチェックを入れます。
11.[トレースを開始する] をクリックします。
12.画面表示が "実行中の処理" から "トレースを制御する" に変化するのを待ちます。
13.画面表示が、"トレースを制御する" に変わりましたら問題の現象を発生させます。
14.現象の確認ができたら [今すぐトレースを停止する] をクリックします。
- トレース制御の実行で確認できる内容
最後に一例として、Outlook 2007 のプロファイ作成時のトレースを採取すると、どのような情報が取得できるかを見ていきます。
ちなみに、採取したトレースの情報を確認するには、専用のツールが必要であり、そのツールは公開されていません。
以下の情報はその専用ツールで確認した内容ですので、ある意味レアな情報なので必見です。
なお、ここで取得するコンポーネントは、 " ADProvider " と “MSExchangeAutodiscover” になります。もちろん、ADProvider については、先の注意事項は忘れす実施です。
-------------------- ここから --------------------
577502E94268MSExchangeAutodiscoverFramework[Provider.base()] Timestamp="16:53:55.5388560";CompterNameHash="1359685320";EmailAddress="Tim@contoso.com";LegacyDN="";UserSID="S-1-5-21-1704072791-1889598559-3047533862-1110";
57870ADProviderLdapFilterBuilderLdapFilterBuilder::LdapFilterFromQueryFilter - forming LDAP Filter for (&((&((|((Sid Equal S-1-5-21-1704072791-1889598559-3047533862-1110)(MasterAccountSid Equal S-1-5-21-1704072791-1889598559-3047533862-1110)))(ObjectClass NotEqual foreignSecurityPrincipal)))(|((ObjectCategory Equal person)(ObjectCategory Equal msExchDynamicDistributionList)(ObjectCategory Equal group)(ObjectCategory Equal publicFolder)(ObjectCategory Equal msExchPublicMDB)(ObjectCategory Equal msExchSystemMailbox)(ObjectCategory Equal msExchExchangeServerRecipient)(ObjectCategory Equal exchangeAdminService)))(!((&((ExchangeVersion GreaterThanOrEqual 1.0 (0.0.0.0))(Exists(ExchangeVersion)))))))).
57880ADProviderLdapFilterBuilderLdapFilterBuilder::LdapFilterFromQueryFilter - Ldap filter = (&(|(objectSid=S-1-5-21-1704072791-1889598559-3047533862-1110)(msExchMasterAccountSid=S-1-5-21-1704072791-1889598559-3047533862-1110))(!(objectClass=foreignSecurityPrincipal))(|(objectCategory=person)(objectCategory=msExchDynamicDistributionList)(objectCategory=group)(objectCategory=publicFolder)(objectCategory=msExchPublicMDB)(objectCategory=msExchSystemMailbox)(objectCategory=msExchExchangeServerRecipient)(objectCategory=exchangeAdminService))(!(&(msExchVersion>=1125899906842624)(msExchVersion=*)))).
5799013965FAADProviderADFindADSession::Find using vandyr139404c.nwtraders.com:3268 - LDAP search from , scope 2, filter (&(|(objectSid=S-1-5-21-1704072791-1889598559-3047533862-1110)(msExchMasterAccountSid=S-1-5-21-1704072791-1889598559-3047533862-1110))(!(objectClass=foreignSecurityPrincipal))(|(objectCategory=person)(objectCategory=msExchDynamicDistributionList)(objectCategory=group)(objectCategory=publicFolder)(objectCategory=msExchPublicMDB)(objectCategory=msExchSystemMailbox)(objectCategory=msExchExchangeServerRecipient)(objectCategory=exchangeAdminService))(!(&(msExchVersion>=1125899906842624)(msExchVersion=*)))), sizeLimit 2, timeout 00:00:30
66130MSExchangeAutodiscoverFramework[LoadProvider()] 'provider "Microsoft.Exchange.Autodiscover.Providers.Outlook.OutlookAutoDiscoverProvider, Microsoft.Exchange.Autodiscover, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" is loaded'
661702E94268MSExchangeAutodiscoverFramework[base.GenerateResponseXml()] 'redirectOrError=false; 'Calling provider's WriteConfigXml()'
668003B97E22MSExchangeAutodiscoverFramework[OnLoad()] 'Request is successfully processed'
-------------------- ここまで --------------------
上記では、Tim@contoso.com という SMTP アドレスを持つアカウントで、プロファイルを作成する際にどのように DC に LDAP クエリをしているかがわかります。
なお、上記の情報は、該当する部分のみを抜粋して記載しています。実際にはもっと細かい処理の情報も記録されていて、該当部分の情報を探し出すのも骨が折れます。
このような感じで、Exchange Server の内部的な動作を確認することができるのが、トレース制御になります。