【问题标题】:PowerShell: send console output to file without deafening this console outputPowerShell:将控制台输出发送到文件而不使此控制台输出震耳欲聋
【发布时间】:2011-03-03 16:16:13
【问题描述】:

我有很多 PowerShell 脚本。一个主要的,称为其他的,子的。这些 PS 脚本依次调用 Windows CMD 脚本、bash 脚本和控制台应用程序。所有这些脚本和应用程序都将消息写入控制台。例如,PowerShell 脚本为此使用了Write-Host scriptlet。

问题:我怎样才能轻松地将所有这些控制台输出重定向(发送)到某个文件,而不是震耳欲聋(取消)这个控制台输出?我希望能够从控制台输出中看到发生了什么,并且在日志文件中也有消息历史记录。

谢谢。

【问题讨论】:

  • 如果你打算对输出做点什么,你到底为什么要使用Write-Host。 Write-Host 正是这样做的——在主机上写一些东西。之后你的脚本就无法控制了。但是,您可以实现自己的主机,但我想这不那么有趣。

标签: powershell redirect console


【解决方案1】:

您可以使用 PowerShell 的 tee 等效项:Tee-Object

PS:serverfault.com 和/或 superuser.com 更适合这样的问题。

【讨论】:

  • 我之前尝试过 Tee-Object,但它并没有达到我的预期。它仅将使用Write-Output(到标准输出)而不是Write-Host 写入的那些输出保存到文件中。我无法将 PS 脚本中的所有 Write-Host 替换为 Write-Output。此外,Tee-Object 忽略错误输出 (stderr)。我需要将控制台上看到的 all 输出重定向到文件。而且,理想情况下,无需重写大写脚本逻辑
【解决方案2】:

你可以试试Start-Transcript 和Stop-Transcript。它有一些限制,例如不捕获本机 exe 输出。它对于 PowerShell 会话也是全局的。

【讨论】:

  • 看起来Start-Transcript 和Tee-Object 的组合可以抓取所有输出,但不幸的是,可以抓取不同的文件。没有简单的方法来合并它们
  • 我也投票支持 Diadistis 的回答(Tee-Object),但决定接受 Keith 的回答。实际上,正如我在之前的评论中提到的那样,最终的解决方案由两个答案组成。对我而言,两个单独的文件实际上并不是什么大问题。
【解决方案3】:

我找到了用于获取控制台输出的脚本:http://gallery.technet.microsoft.com/scriptcenter/e8fbffde-7d95-42d9-81de-5eb3d9c089e0。脚本返回 HTML 以保留颜色。

唯一的大缺点 - 您必须在脚本末尾调用它以捕获它所做的所有控制台输出。

【讨论】:

    【解决方案4】:

    您可能需要编写一个自定义主机来执行此操作。这不是一件非常困难的事情,但它确实需要一些托管代码。

    【讨论】:

    • 谢谢,迈克。但是这样的解决方案不适合我的情况。
    猜你喜欢
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多