PowerShell 2.0命令行redirect

我正在寻找关于以下差异的解释:

鉴于下面的PowerShell脚本foo.ps1

write-host "normal" write-error "error" write-host "yay" 

运行它

C:\>powershell .\foo.ps1 > out.txt 2>&1

生产:

 normal C:\foo.ps1 : error At line:1 char:10 + .\foo.ps1 <<<< + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,foo.ps1 Write-Host : The OS handle's position is not what FileStream expected. Do not use a handle simultaneously in one FileStream and in Win32 co de or another FileStream. This may cause data loss. At C:\foo.ps1:3 char:11 + write-host <<<< "yay" + CategoryInfo : NotSpecified: (:) [Write-Host], IOException + FullyQualifiedErrorId : System.IO.IOException,Microsoft.PowerShell.Commands.WriteHostCommand 

但运行:

C:\>powershell .\foo.ps1 2>&1 > out.txt

产生(正确):

 normal C:\foo.ps1 : error At line:1 char:10 + .\foo.ps1 <<<< + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,foo.ps1 yay 

我几乎决定自己认为redirect的顺序在Windows中非常重要,但TechNet使用页面中的所有命令redirect示例都显示stderrredirect之前的文件redirect。

有人可以向我解释这个吗?

作为参考,这是在Server 2003 x64 SP2上完成的:

 C:\>powershell get-host Name : ConsoleHost Version : 2.0 InstanceId : 53c90e87-ded1-44f9-8e8d-6baaa1335420 UI : System.Management.Automation.Internal.Host.InternalHostUserInterface CurrentCulture : en-US CurrentUICulture : en-US PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy IsRunspacePushed : False Runspace : System.Management.Automation.Runspaces.LocalRunspace 

并使用写入输出产生相同的结果。

(这个问题与我解决这个问题的工作有关。)

Solutions Collecting From Web of "PowerShell 2.0命令行redirect"