我正在測試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)只顯示幾行然後返回我的對象。
這是我從控制檯得到的。這有所有我想要的信息:
這是我從PowerShell中獲取。它具有較少信息:
附錄:其實我發現,在控制檯窗口或在PowerShell控制檯窗口中執行腳本時輸出正確的行爲。只有PowerShell ISE無法正常工作。也許這不是PowerShell問題,而是ISE錯誤。