Verwenden Sie Powershell, um native Befehlszeilen-App aufzurufen und STDERR zu erfassen

9496
yzorg

Ich verwende einen Port eines Cygwin-Tools unter Windows, der normale Statusmeldungen in STRERR schreibt. Dies führt beim Ausführen von PowerShell zu einer unschönen Ausgabe:

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 

Gibt es einen besseren Weg?

PS Ich habe vor, eine Lösung zu posten, die ich gefunden habe, und sie mit den Antworten anderer zu vergleichen.

5

2 Antworten auf die Frage

1
yzorg

Dies ist eine Lösung, die ich gefunden habe. Bitte posten Sie Ihre Antwort, wenn Sie eine bessere Antwort haben (dies ist nur für Befehlszeilenprogramme gedacht, die Statusnachrichten an STDERR anstelle des normalen Ausgabestroms senden):

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 ... 
Es sieht gut aus, außer dass '| Out-Default` ist wahrscheinlich nicht erforderlich. Dennis Williamson vor 13 Jahren 0
1
Colonel Panic

Nein, leider. Diese Hässlichkeit ist eine von Design entworfene Funktion von Powershell :( Wenn eine Anwendung auf Standardfehler druckt (und alles andere zu hören ist), umschließt Powershell jede Zeile in einem verschleierten 'NativeCommandError'-Objekt. Siehe https://stackoverflow.com/questions / 1394084 / ignoring-an-errorlevel-0-in-Windows-Powershell für mehr Details

Sie könnten die hässlichen Objekte zum Schweigen bringen, aber dann würden Sie auch den nützlichen Inhalt verlieren.