0

我正在測試PowerShell中的程序集。該程序集的一個功能是使用System.Diagnostics.Trace技術編寫跟蹤信息。通過在Listener集合中添加ConsoleTraceListener,我的應用程序應該能夠顯示發送到跟蹤系統的所有消息。爲什麼PowerShell在使用System.Diagnostic.Trace.Listeners時不顯示所有跟蹤信息?

這適用於控制檯應用程序和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或使用自定義偵聽器。

相關問題