为什么在行尾添加重定向后跟随PowerShell显示错误?

时间:2016-08-14 01:16:37

标签: shell powershell command-line command powershell-v3.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.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的实际显示错误。那么任何原因?

1 个答案:

答案 0 :(得分:0)

我想回答我的问题,以便关闭并为其他人提供帮助。

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

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

可在以下网址找到更多信息:$LastExitCode=0 but $?=False in PowerShell. Redirecting stderr to stdout gives NativeCommandError