題 使用powershell調用本機命令行應用程序並捕獲STDERR


我在Windows上使用了一個cygwin工具的端口,它將正常狀態消息寫入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

有沒有更好的辦法?

附:我打算發布一個我找到的解決方案,並將其與其他人的答案進行比較。


5
2017-11-22 19:20


起源




答案:


沒有唉。這種醜陋是Powershell的一個設計特性:(如果一個應用程序打印到標準錯誤(以及其他任何東西正在偵聽),那麼Powershell將每一行包裝在一個混淆的“NativeCommandError”對像中。 https://stackoverflow.com/questions/1394084/ignoring-an-errorlevel-0-in-windows-powershell 了解更多細節

你可以沉默醜陋的物體,但你也會失去有用的內容。


1
2017-08-16 11:48





這是我發現的一個解決方案。如果您有更好的答案,請發布您的答案(這僅適用於將狀態消息發送到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 ...

1
2017-11-22 19:22



除此之外我覺得很好 | Out-Default 可能沒必要。 - Dennis Williamson