Gibt es einen Fehler im PowerShell- Start-Process
Befehl beim Zugriff auf die Eigenschaften StandardError
und StandardOutput
?
Wenn ich Folgendes ausführe, erhalte ich keine Ausgabe:
$process = Start-Process -FilePath ping -ArgumentList localhost -NoNewWindow -PassThru -Wait
$process.StandardOutput
$process.StandardError
Wenn ich die Ausgabe jedoch in eine Datei umleitung, erhalte ich das erwartete Ergebnis:
$process = Start-Process -FilePath ping -ArgumentList localhost -NoNewWindow -PassThru -Wait -RedirectStandardOutput stdout.txt -RedirectStandardError stderr.txt
powershell
start-process
jzbruno
quelle
quelle
$process= ping localhost
# würde die Ausgabe in der Prozessvariablen speichern.Antworten:
So
Start-Process
wurde es aus irgendeinem Grund entworfen. Hier ist eine Möglichkeit, es zu erhalten, ohne es in eine Datei zu senden:quelle
In dem in der Frage angegebenen Code denke ich, dass das Lesen der ExitCode-Eigenschaft der Initiationsvariablen funktionieren sollte.
Beachten Sie, dass Sie (wie in Ihrem Beispiel) die Parameter
-PassThru
und hinzufügen müssen-Wait
(dies hat mich eine Weile überrascht).quelle
-NoNewWindow
mit-Verb runAs
Ich hatte auch dieses Problem und verwendete schließlich Andys Code , um eine Funktion zum Aufräumen zu erstellen, wenn mehrere Befehle ausgeführt werden müssen.
Es werden stderr-, stdout- und exit-Codes als Objekte zurückgegeben. Eines ist zu beachten: Die Funktion wird
.\
im Pfad nicht akzeptiert . Es müssen vollständige Pfade verwendet werden.So verwenden Sie es:
quelle
Ich hatte wirklich Probleme mit diesen Beispielen von Andy Arismendi und von LPG . Sie sollten immer verwenden:
vor dem Anruf
Ein vollständiges Beispiel ist:
quelle
WICHTIG:
Wir haben die oben von LPG bereitgestellte Funktion verwendet .
Dies enthält jedoch einen Fehler, der auftreten kann, wenn Sie einen Prozess starten, der viel Ausgabe generiert. Aus diesem Grund kann es bei Verwendung dieser Funktion zu einem Deadlock kommen. Verwenden Sie stattdessen die unten angepasste Version:
Weitere Informationen zu diesem Thema finden Sie unter MSDN :
quelle
Hier ist meine Version der Funktion, die Standard System.Diagnostics.Process mit 3 neuen Eigenschaften zurückgibt
quelle
Hier ist eine klobige Möglichkeit, die Ausgabe eines anderen Powershell-Prozesses zu erhalten:
quelle