繁体   English   中英

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

[英]How to tee the output streams of the current PowerShell script?

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

最好的方法是什么?

我考虑过几件事情:

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

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

哎呦。 我应该花几分钟时间跟谷歌一起玩。

Start-Transcript就是这样做的!

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

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

https://web.archive.org/web/20111106093956/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更改为您想要的成绩单宽度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM