2012-01-30 38 views
9

Tôi đang tìm kiếm một giải thích về sự khác biệt sau:PowerShell dòng 2.0 lệnh chuyển hướng

Với các kịch bản PowerShell sau foo.ps1:

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

Chạy nó với

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

Sản xuất:

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 

Nhưng chạy với:

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

Tạo (chính xác):

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 

Tôi gần như giải quyết bản thân mình vào suy nghĩ rằng thứ tự của các chuyển hướng tố quan trọng trong Windows, tuy nhiên tất cả các ví dụ trong TechNet usage page for command redirection hiển thị chuyển hướng tệp trước chuyển hướng stderr.

Ai đó có thể giải thích điều này cho tôi không?

Để tham khảo, điều này đã được thực hiện trên Server 2003 x64 SP2 với:

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 

và sử dụng ghi-sản lượng sản xuất cùng một kết quả.

(Câu hỏi này có liên quan đến công việc của tôi trong việc giải quyết this.)

+1

Tôi không biết câu trả lời, nhưng tôi biết rằng Máy chủ lưu trữ được xử lý khác với tất cả các lệnh ghép ngắn Viết khác. Tôi tránh nó như bệnh dịch ngay bây giờ. Hãy thử kiểm tra của bạn với Write-Output. – EBGreen

+0

cảm ơn về mẹo! thật không may, kết quả tương tự cũng xảy ra. –

+1

Write-Output và Write-Host có các mục đích rất khác nhau. Write-Host ghi thông tin (văn bản) vào máy chủ PowerShell. Viết-đầu ra viết một đối tượng vào đường ống PowerShell, sau đó có thể bị chặn và xử lý bằng một lệnh chấp nhận đầu vào đường ống. Nếu không có lệnh như vậy được sử dụng, thì đầu ra đối tượng cũng được trả về cho máy chủ. –

Trả lời

1

Trông giống như một lỗi trong PowerShell 2.0. Tôi đã thử tái tạo với bản xem trước PowerShell 3.0 và giờ đây nó hoạt động như mong đợi.

+0

bạn có câu trả lời ... hạnh phúc hơn không? –

+0

Nâng cấp lên CTP, báo cáo sự cố với Msft

Các vấn đề liên quan