0

PowerShellでアセンブリをテストしています。このアセンブリの特徴は、System.Diagnostics.Traceテクノロジを使用してトレース情報を書き込むことです。 ConsoleTraceListenerListenerコレクションに追加すると、アプリケーションはトレースシステムに送信されたすべてのメッセージを表示できるはずです。System.Diagnostic.Trace.Listenersを使用しているときにPowerShellがすべてのトレース情報を表示しないのはなぜですか?

これは、コンソールアプリケーションとVisual Studio出力ウィンドウで機能します。それはPowerShellの中でさえ一種の作品ですが、出力がずっと少ないことを除けば、問題は非同期操作に関連していると思われますが、実際には分かりません。

$dll = (Get-ChildItem -Recurse -Filter 'mylib.dll' | select -First 1).FullName 
[Reflection.Assembly]::LoadFile($dll) | Out-Null 

$listener = New-Object System.Diagnostics.ConsoleTraceListener 
[System.Diagnostics.Trace]::Listeners.Clear() 
[System.Diagnostics.Trace]::Listeners.Add($listener) 

$service = 'servicename' 
[Team.Library.Project.Name]::MethodAsync($service).Result 

これは私が期待するコンソールバージョンです。すべてのトレース情報がコンソールに表示されます。ただし、この実装(PowerShell)では、数行しか表示されず、オブジェクトが返されます。

これはコンソールから取得したものです。

Console application trace output.

これは私がPowerShellのから得るものです:これは私が望むすべての情報を持っています。それはあまり情報を持っています

PowerShell trace output.


補遺:私は、コンソールウィンドウまたはPowerShellコンソールウィンドウでスクリプトを実行するときに、出力が正しく動作することを実際に発見しました。 PowerShell ISEだけが正しく動作しません。これはPowerShellの問題ではなく、ISEのバグです。

答えて

0

pwershell_ISE.exeのTraceListener設定を試して設定し、ConsoleTraceListenerを直接有効にします。さらに出力がある場合はDebugViewにチェックします。はいの場合は、DefaultTraceListener情報をConsoleTraceListenerにリダイレクトするか、カスタムリスナーを使用する必要があります。

関連する問題