2012-01-30 1 views
9

私は次の食い違いの説明を探しています:のPowerShell 2.0コマンドラインのリダイレクト

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

C:\>powershell .\foo.ps1 > out.txt 2>&1でそれを実行:以下のPowerShellスクリプトfoo.ps1を考えると

生産数:

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 

私はほとんどのリダイレクトの順序は、Windowsに大事という考えに自分自身を解決するのがすべてTechNet usage page for command redirectionの例では、stderrリダイレクトに先行するファイルリダイレクションを示しています。

私にこれを説明してもらえますか?参考

、これはとServer 2003のx 64の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 

とライト出力を使用して同じ結果を生成します。

(この質問はthisを解決するには、私の仕事に関連している。)

+1

答えはわかりませんが、Write-Hostが他のすべてのWriteコマンドレットとは異なる扱いを受けることはわかります。私は今、ペストのようにそれを避ける。 Write-Outputでテストを試してみてください。先端のおかげで – EBGreen

+0

!残念ながら、同じ結果が発生します。 –

+1

Write-OutputとWrite-Hostは非常に異なる目的を持っています。 Write-Hostは情報(テキスト)をPowerShellホストに書き込みます。 Write-OutputはオブジェクトをPowerShellパイプラインに書き込みます。オブジェクトはパイプライン入力を受け付けるコマンドによってインターセプトされ、処理されます。そのようなコマンドが使用されない場合、オブジェクト出力もまたホストにレンダリングされる。 –

答えて

1

のPowerShell 2.0のバグのように見えること。私はPowerShell 3.0プレビューで再生しようとしましたが、現在は期待どおりに動作します。

+0

あなたは幸せな答えを持っていますか? –

+0

CTPにアップグレードし、問題をMsft に報告してください –

関連する問題