【问题标题】:How do I redirect Console Output to PowerShell Output within a module?如何将控制台输出重定向到模块内的 PowerShell 输出?
【发布时间】:2017-09-16 16:08:26
【问题描述】:

如果我正在编写一个二进制 PowerShell 模块并且我碰巧使用了一个写入 STDOUT (Console.Out) 的 .NET 库——有没有推荐的方法来重新路由控制台输出到PowerShell 的输出流?

我可以通过Console.SetOut(...) 设置我自己的TextWriter 来拦截Console.Out,然后用它做一些事情(即我可以用StringWriter 缓冲输出并在将来的某个时间将其全部写出来,或者我可以编写一个自定义TextWriter,将所有Write 命令发送到PowerShell 的WriteObject)。

我的问题是,是否已经有一些标准或推荐的做法来执行此操作或 PowerShell 库中的一些内置工具?

【问题讨论】:

  • 我不这么认为。您所描述的(在 TextWriter 中包装 WriteObject() 并将其设置为 Console.Out)正是我所建议的
  • 谢谢,这似乎也是 PS 团队的指导。

标签: powershell powershell-module


【解决方案1】:

我通过 GitHub 询问了 PS 团队的问题,普遍的回答是 TextWriter-to-WriteObject 方法是一种合理的方法:https://github.com/PowerShell/PowerShell/issues/4849

【讨论】:

    【解决方案2】:

    如果要输出到管道,请使用WriteObject()。 WriteInformation()、WriteDebug()、WriteWarning() 获取到主机的消息(字符串)。

    【讨论】:

    • 是的,这对于我控制的内容来说很好,但问题的关键是如何将其他人的输出重定向到 STDIO 输出?在任何情况下,解决方案都得到了 PS 团队的确认——您只需自己进行重定向。
    猜你喜欢
    • 2013-11-14
    • 1970-01-01
    • 2013-12-07
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2021-12-12
    相关资源
    最近更新 更多