正确使用2>&1 |三通或| T恤配Powershell

时间:2018-10-24 14:00:15

标签: powershell logging command-line command-line-interface

我想在控制台中查看命令的输出并将其保存在文件中,所以我有两个选择:

当我以某种方式使用command | tee output.txt时,它根本不生成任何输出文件,但在控制台中照常工作。

当我使用command 2>&1 | tee output.txt时,它会生成一个精细的输出文件,但控制台中的文本显示为红色。 enter image description here

有什么办法可以修复第一个选项,还是让文本照常显示在第二个选项中?我正在使用Windows PowerShell(Windows 10),而我正在使用的程序是liquibase 3.5.5。只是在这很重要的情况下。

2 个答案:

答案 0 :(得分:2)

在PowerShell中,通过2>&1将stderr行从外部程序重定向到PowerShell的成功流,将这些行包装在[System.Management.Automation.ErrorRecord]实例中,这就是为什么您看到红色输出的原因(没有重定向, stderr行通过到控制台,而不会着色)。

一种简单的解决方法是将这些对象显式转换为字符串,并输出原始行(PSv3 +语法;为简短起见,%的内置别名ForEach-Object):

... 2>&1 | % ToString | Tee-Object output.txt

答案 1 :(得分:0)

如果您使用的是 DOS,那么您可以利用 powershell(来自 DOS)并使用 tee-object 或多或少地像在 Linux 中那样做一个 tee。

C:> powershell some_command ^| tee-object -FilePath some_outputfile

'^' 对管道进行转义,以便管道适用于 powershell 而不是 DOS。

Powershell 和 tee-object 应该是 Windows 的标准配置,所以无需安装!

相关问题