Chr*_*lan 9 windows powershell file-io command-line powershell-2.0
我正在寻找以下差异的解释:
给出以下powershell脚本foo.ps1:
write-host "normal"
write-error "error"
write-host "yay"
Run Code Online (Sandbox Code Playgroud)
运行它
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
Run Code Online (Sandbox Code Playgroud)
但运行:
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
Run Code Online (Sandbox Code Playgroud)
我几乎认为自己认为重定向的顺序在Windows中很重要,但是TechNet用法页面中用于命令重定向的所有示例都显示了stderr重定向之前的文件重定向.
有人可以向我解释一下吗?
作为参考,这是在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
Run Code Online (Sandbox Code Playgroud)
并使用write-output产生相同的结果.
(这个问题与我解决这个问题的工作有关.)
| 归档时间: |
|
| 查看次数: |
1642 次 |
| 最近记录: |