Использование powershell вызывает собственное приложение командной строки и захватывает STDERR

9420
yzorg

Я использую порт инструмента cygwin в Windows, который пишет обычные сообщения о состоянии в STRERR. Это приводит к ужасному выводу при запуске из PowerShell:

PS> dos2unix.exe -n StartApp.sh StartApp_fixed.sh dos2unix.exe : dos2unix: converting file StartApp.sh to file StartApp_fixed.sh in UNIX format ... At line:1 char:13 + dos2unix.exe <<<< -n StartApp.sh StartApp_fixed.sh + CategoryInfo : NotSpecified: (dos2unix: conve...UNIX format ...:String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError 

Есть ли способ лучше?

PS Я намерен опубликовать одно решение, которое я нашел, и сравнить его с ответами других.

5

2 ответа на вопрос

1
yzorg

Это одно решение, которое я нашел. Пожалуйста, оставьте свой ответ, если у вас есть лучший ответ (он предназначен только для утилит командной строки, которые отправляют сообщения о состоянии в STDERR вместо обычного потока вывода):

PS> $output = dos2unix.exe -n StartApp.sh StartApp_fixed.sh 2>&1 $output.CategoryInfo.TargetName | Out-Default dos2unix: converting file StartApp.sh to file StartApp_fixed.sh in UNIX format ... 
Это выглядит хорошо для меня, за исключением того, что `| Out-Default`, вероятно, не нужен. Dennis Williamson 13 лет назад 0
1
Colonel Panic

Нет увы Это уродство является особенностью Powershell :( Если приложение печатает со стандартной ошибкой (и все остальное слушает), то Powershell оборачивает каждую строку в запутывающий объект 'NativeCommandError'. См. Https://stackoverflow.com/questions / 1394084 / игнорирование уровня ошибки-0-в-Windows-PowerShell для более подробной информации

Вы можете замолчать уродливые объекты, но тогда вы потеряете и полезный контент.