Jac*_*eja 7 powershell trace powershell-jobs
我使用PowerShell中的.NET组件,它使用Trace.TraceWarning,Trace.TraceInformation等等.
我想在运行Powershell脚本时将这些跟踪输出到控制台.
当我在当前会话中使用该组件时,这可以工作.例如(模拟跟踪的效果)给控制台输出'Hello':
$listener = new-object "system.diagnostics.consoletracelistener"
[System.Diagnostics.Trace]::Listeners.Add($listener) | Out-Null
[System.Diagnostics.Trace]::TraceInformation("Hello")
Run Code Online (Sandbox Code Playgroud)
但是如果我在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
Run Code Online (Sandbox Code Playgroud)
Joe*_*orn -1
目前尚不清楚您希望捕获的输出去往何处。到目前为止,大部分讨论都是围绕控制台展开的,但由于您称其为“作业”(我想您的意思是计划任务),所以我不太确定控制台是最好的地方。你永远不会看到结果。日志文件听起来更合适。如果是这种情况,您应该创建一个TextWriteTraceLister。这将允许您为结果设置一个日志文件。
此外,.Net 中的跟踪的一大优点是您可以附加多个侦听器。因此,如果您想在运行时查看输出,您还可以附加 ConsoleTraceListener,并且它不会干扰写入日志文件。
最后,还可以编写自己的 TraceListener。这对于写入日志数据库或 Web 服务之类的事情很有用。要在 PowerShell 中使用您自己的 TraceListener,您需要使用 .Net 语言构建侦听器,该语言可以编译为类库程序集 (dll),然后将其部署到 GAC 以在您的项目中使用。
| 归档时间: |
|
| 查看次数: |
1606 次 |
| 最近记录: |