首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确使用powershell的2>&1 \ tee或\\ tee

正确使用powershell的2>&1 \ tee或\\ tee
EN

Stack Overflow用户
提问于 2018-10-24 14:00:14
回答 2查看 9.2K关注 0票数 6

我希望看到控制台中命令的输出,并将其保存在一个文件中,因此我有以下两个选项:

当我使用command | tee output.txt时,它根本不生成任何输出文件,但它在控制台中像往常一样工作。

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

是否有任何方法可以修复第一个选项或让文本像往常一样出现在第二个选项中?我使用的是Windows 10( PowerShell 10),我使用的程序是清算基础3.5.5。只是因为这件事很重要。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-24 21:13:25

在PowerShell中,通过2>&1将stderr行从外部程序重定向到PowerShell的成功流时,会将这些行包装在[System.Management.Automation.ErrorRecord]实例中,以防捕获这些行以供进一步处理。

在Windows PowerShell中,这些捕获的实例呈现为PowerShell错误,这就是您看到红色输出的原因(相比之下,如果没有重定向,stderr行将传递到控制台,而无需着色)。

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

代码语言:javascript
复制
... 2>&1 | % ToString | Tee-Object output.txt

注意:在安装随需应变、跨平台的https://github.com/PowerShell/PowerShell/blob/master/README.md版本中,这个解决方案不再必要,即使是捕获的stderr行现在也一直以字符串的形式呈现。

票数 8
EN

Stack Overflow用户

发布于 2020-12-21 06:21:38

如果您在DOS中,那么您可以利用powershell (来自DOS)并使用tee对象,或多或少像Linux中的tee一样。

代码语言:javascript
复制
C:\> powershell some_command ^| tee-object -FilePath some_outputfile

^转义管道,以便管道应用于powershell,而不是DOS。

Powershell和to object应该以Windows为标准,所以不需要安装任何东西!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52970939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档