gpt4 book ai didi

logging - 如何处理当前PowerShell脚本的输出流?

转载 作者:行者123 更新时间:2023-12-02 16:37:07 30 4
gpt4 key购买 nike

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

最好的方法是什么?

我考虑过的几件事:

  • 使用执行 tee 的函数包装写入错误和写入输出。
    • 我不太喜欢这个,因为(a)我失去了将值放在一行上并自动输出的简单能力,(b)我必须包装我正在调用的每个地方,包括 native exe,可能有输出并包装它们。
  • 封装在执行 T 恤的外部脚本中。
    • 这好一点,但现在我遇到了需要在外部脚本中复制内部脚本中的 param() block 的问题。我可以完全移动 param() block ,但有时我也想出于测试目的调用内部脚本(即不获取 T 恤)。我想我可以在外部脚本中将其作为可选行为..

我记得当我编写一些 Perl 时,有一种方便的方法可以通过钩子(Hook)全局重定向所有 stdout/err 输出。使用 PowerShell 可以实现类似的功能吗?

最佳答案

哎呀。我应该再花几分钟与 Google 交流。

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 更改为您想要的文字记录宽度。

关于logging - 如何处理当前PowerShell脚本的输出流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4150921/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com