【问题标题】:Redirect cmdlet warning/error output?重定向 cmdlet 警告/错误输出?
【发布时间】:2013-12-13 20:19:31
【问题描述】:

这一定是一个非常简单的解决方案,但我一生都无法弄清楚如何将错误/警告重定向到标准输出。

现在,我通过将其分配给变量来捕获内容的输出,而不用担心格式等,例如:

$buffer += Whatever-Cmdlet

但我想做的是将任何错误消息捕获到该变量中。就像做 2>&1。

有什么办法可以使这个工作吗?我确实尝试过:

$buffer += Whatever-Cmdlet 2>&1 

没有成功。

感谢您的帮助!

【问题讨论】:

    标签: powershell


    【解决方案1】:

    没有彻底测试,但是

    $buffer += Whatever-Cmdlet -WarningVariable +buffer -ErrorVariable +buffer
    

    如果您有 v3/4:

    $PSDefaultParameterValues=@{"*:WarningVariable"="+buffer";"*:ErrorVariable"="+buffer";}
    

    应该在设置后对运行的所有 cmdlet 执行此操作。

    【讨论】:

    • 没有看到带有WarningVariable和ErrorVariable的“+”语法。
    • 注意PSDefaultParameterValues的使用需要V3或更高版本。
    【解决方案2】:

    其实只要你管输出就行了:

    $buffer += Whatever-Cmdlet 2>&1 | Out-String
    

    它似乎工作。谢谢!

    【讨论】:

    • 是的,这正是您使用 .EXE 的方式。但是,这不适用于 cmdlet。换句话说,get-process 2>&1 之类的东西不会像你描述的那样做,但 cmd /c type myfile.txt 2>&1 会。
    【解决方案3】:

    这取决于您运行的 PowerShell 版本。在 PowerShell v2 中,警告会写入主机,因此无法在变量中捕获。在 PowerShell v3 中,警告被写入单独的输出流,因此您必须重定向警告流以及错误流以捕获错误和警告:

    $buffer += Whatever-Cmdlet 2>&1 3>&1 | Out-String
    

    更多信息请参见Get-Help about_Redirection

    【讨论】:

      猜你喜欢
      • 2019-06-24
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 2014-05-24
      相关资源
      最近更新 更多