我在 Powershell 中使用 .NET 组件,它使用 .NETTrace.TraceWarning
等Trace.TraceInformation
。
当我运行我的 Powershell 脚本时,我想将这些跟踪输出到控制台。
这在我在当前会话中使用组件时有效。例如(模拟跟踪的效果)给我 'Hello' 输出到控制台:
$listener = new-object "system.diagnostics.consoletracelistener"
[System.Diagnostics.Trace]::Listeners.Add($listener) | Out-Null
[System.Diagnostics.Trace]::TraceInformation("Hello")
但是,如果我在 Powershell 作业中做同样的事情,我不会得到任何输出,即使 ConsoleTraceListener 应该写入 STDOUT,而我又希望被作业捕获。(有趣Console.WriteLine
的是,也不能从工作中工作——但Write-Host
确实如此)。
我开始我的工作是这样的:
$work = {
$listener = new-object "system.diagnostics.consoletracelistener"
[System.Diagnostics.Trace]::Listeners.Add($listener) | Out-Null
[System.Diagnostics.Trace]::TraceInformation("Hello")
}
$job = Start-Job -RunAs32 -ScriptBlock $work
$job | Receive-Job -Wait