Die PowerShell-Konsole und die PowerShell-ISE verhalten sich anders, wenn ausführbare Dateien in den Standardfehlerdatenstrom schreiben ( stderr
). Die Konsole (powershell.exe) zeigt sie wie die Standardausgabe an. Wenn ich zum Beispiel einen Status mit Mercurial auf einem Nicht-Repository erhalte, schreibt es in den Standardfehler:
In der PowerShell ISE ( powershell_ise.exe
) wird dieser Fehler jedoch an das Cmdlet Write-Error
von PowerShell übergeben:
Gibt es eine Möglichkeit, die ISE so zu konfigurieren, dass sie sich wie die Konsole verhält, und den stderr-Stream nicht an Write-Error
?
Die stderr-Ausgabe an stdout umleiten "sollte" funktionieren, aber nicht in ISE. In diesem Fall ist es am besten, die Fehlerausgabe wie folgt stumm zu schalten:
%Vor% Wenn Sie diese Variable in einem verschachtelten Bereich festlegen, vermeiden Sie es, sie global festzulegen. Wenn der obige Bereich beendet wird, wird die globale Version von $ErrorActionPreference
immer noch auf den vorherigen Wert gesetzt.
Es ist bedauerlich, dass sich ISE und die Konsole anders verhalten, aber ich verstehe, dass mit der "Konsole" eine andere Konsolenanwendung nur das Konsolenhandle bekommt, so dass es direkt auf die Konsole ausgibt (Bypassing) Power Shell). ISE ist nicht konsolenbasiert, daher versucht es, natives stderr gut mit dem PowerShell-Fehlerstream zu spielen. IMO das Verhalten der Konsole ist in diesem Fall nicht ideal. Also ist es besser, ISE konsistent mit Konsole oder besser ISE Griff Stderr besser zu haben (mit Ausnahme der Bit über Stream-Umleitung nicht zu honorieren)? Offensichtlich ging die PowerShell mit letzterem.
Tags und Links powershell powershell-ise