PowerShellでアセンブリをテストしています。このアセンブリの特徴は、System.Diagnostics.Trace
テクノロジを使用してトレース情報を書き込むことです。 ConsoleTraceListener
をListener
コレクションに追加すると、アプリケーションはトレースシステムに送信されたすべてのメッセージを表示できるはずです。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)では、数行しか表示されず、オブジェクトが返されます。
これはコンソールから取得したものです。
これは私がPowerShellのから得るものです:これは私が望むすべての情報を持っています。それはあまり情報を持っています
補遺:私は、コンソールウィンドウまたはPowerShellコンソールウィンドウでスクリプトを実行するときに、出力が正しく動作することを実際に発見しました。 PowerShell ISEだけが正しく動作しません。これはPowerShellの問題ではなく、ISEのバグです。