如何开发当前PowerShell脚本的输出流?

时间:2010-11-11 02:28:55

标签: logging powershell

我有一个PowerShell脚本输出到stdout和stderr。我想同时将它们发给几个日志文件。

最好的方法是什么?

我考虑过几件事:

  • 使用执行tee的函数包装写入错误和写入输出。
    • 我不喜欢这么多,因为(a)我失去了将一个值放在一条线上并让它自动输出的简单能力。(b)我必须把我所称的每个地方都包裹起来,包括本机exe,可能有输出并包装它们。
  • 包装一个执行T恤的外部脚本。
    • 这稍微好一些,但现在我遇到了需要从外部脚本中的内部脚本复制param()块的问题。我可以完全移动param()块,但我也想调用内部脚本有时用于测试目的(即没有得到发球台)。我想我可以在外部脚本中将其作为可选行为..

我记得当我以前写一些perl时,有一种方便的方法可以通过钩子全局重定向所有stdout / err输出。 PowerShell可以这样吗?

1 个答案:

答案 0 :(得分:4)

糟糕。我应该花几分钟时间与谷歌相处。

Start-Transcript就是这样做的!

http://technet.microsoft.com/en-us/library/dd347721.aspx

..虽然它不捕获exe的输出,但只有PowerShell。这是一个很好的解决方法:

http://blog.magenic.com/blogs/daniels/archive/2008/07/14/Output-Issue-with-Transcript-in-Powershell.aspx

另一个更新:我发现Start-Transcript使用主机窗口缓冲区宽度,这在系统帐户上运行计划任务时太窄了。这是如何解决这个问题。将这样的内容添加到脚本的顶部:

try
{
    $host.ui.rawui.buffersize = `
        new-object system.management.automation.host.size `
            200, $host.ui.rawui.buffersize.height
}
catch {}

将200更改为您想要的成绩单宽度。