为什么在行尾添加重定向后出现以下PowerShell显示错误?

为什么在行尾添加重定向后出现以下PowerShell显示错误?,shell,powershell,command-line,command,powershell-3.0,Shell,Powershell,Command Line,Command,Powershell 3.0,我有一个python脚本,它将调用nmake。我想在powershell中调用此脚本,如下所示 python D:\build.py -f folder 工作正常,输出如下: Microsoft (R) Program Maintenance Utility Version 11.00.50727.1 Copyright (C) Microsoft Corporation. All rights reserved. 但是如果我添加重定向,使所有的stderr&stdout转到build.l

我有一个python脚本,它将调用
nmake
。我想在powershell中调用此脚本,如下所示

python D:\build.py -f folder
工作正常,输出如下:

Microsoft (R) Program Maintenance Utility Version 11.00.50727.1
Copyright (C) Microsoft Corporation.  All rights reserved.
但是如果我添加重定向,使所有的
stderr&stdout
转到
build.log
,如下所示,它会显示红色错误:

python D:\build.py -f folder 2>&1 | tee build.log

python :
At line:1 char:1
+ python D:\source_code\media\media\build_system\build.py -f xplatform_ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

Microsoft (R) Program Maintenance Utility Version 11.00.50727.1
Copyright (C) Microsoft Corporation.  All rights reserved.
----编辑1--

我理解可能的原因是外部
nmake
可执行文件写入
stderr
,然后Powershell显示错误


但是第一个例子没有重定向,没有显示错误。第二个将stderr重定向到stdout,实际上显示了错误。有什么原因吗?

我想回答我的问题,这样它就可以结束,并对其他人有所帮助

它显示错误的原因是
ErrorRecord
对象在
stdout
中打印

并且
2>&1
重定向对象而不是文本。因此,在添加重定向后,
ErrorRecord
被重定向到
stdout


更多信息请访问:

我想回答我的问题,这样它就可以关闭并对其他人有所帮助

它显示错误的原因是
ErrorRecord
对象在
stdout
中打印

并且
2>&1
重定向对象而不是文本。因此,在添加重定向后,
ErrorRecord
被重定向到
stdout


更多信息可以在以下位置找到:

的可能重复项,但我有重定向stderr,第一个代码段没有显示errOk,我知道了。Powershell中的重定向是重定向对象,而不是文本。即使在stdout中,ErrorRecord对象仍然被打印。那么我如何才能将这篇文章标记为关闭?自己写一个答案并接受它可能的副本,但我有重定向stderr,并且第一个代码片段没有显示errOk,我知道了。Powershell中的重定向是重定向对象,而不是文本。即使在标准输出中,ErrorRecord对象仍然被打印。那么我如何才能将这篇文章标记为关闭?自己写一个答案并接受它