Перенаправление командной строки powershell 2.0 - PullRequest
9 голосов
/ 30 января 2012

Я ищу объяснение следующего несоответствия:

Учитывая следующий скрипт 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

Я почти решил, что порядок перенаправления имеет значение в 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

и использование записи-вывода дает тот же результат.

(Этот вопрос связан с моей работой по решению this .)

1 Ответ

1 голос
/ 30 января 2012

Это похоже на ошибку в PowerShell 2.0.Я попытался воспроизвести с предварительным просмотром PowerShell 3.0 , и теперь он работает как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...