Wie pipe die Ausgabe von .exe-Ausführung in der Powershell?
In der Powershell läuft bei mir psftp.exe
die PuTTy-homepage. Ich bin, dies zu tun:
$cmd = "psftp.exe"
$args = '"username@ssh"@ftp.domain.com -b psftp.txt';
$output = & $cmd $args
Diesem Werke; und ich bin ausdrucken $output
. Aber nur Fänge eine Ausgabe in die variable (wie "Remote working directory ist [...]") und wirft anderen Ausgang zu einem Fehler in der Art wie dieses:
psftp.exe : Using username "username@ssh".
At C:\full_script.ps1:37 char:20
+ $output = & <<<< $cmd $args
+ CategoryInfo : NotSpecified: (Using username "username@ssh".:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Diese "Mit Benutzername ..." etc sieht aus wie ein normales FTP-Nachricht. Wie kann ich sicherstellen, dass alle Ausgaben bekommt in $output
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist eine Ausgabe an STDERR und die Umleitung funktioniert anders als in PowerShell CMD.EXE.
Wie umleiten der Ausgabe der Konsole in eine Datei in PowerShell hat eine gute Beschreibung des Problems und eine clevere workaround.
Grundsätzlich, rufen Sie
CMD
mit Ihrer ausführbaren Datei als parameter. Wie diese:UPDATE
Habe ich Fix meinen code so, dass es tatsächlich funktionieren würde. 🙂
$output
scheint es nirgends zu finden. Mit Ihrem code haben Sie die Absicht für das?PSFTP.EXE
zu testen, mit so war ich mitPSEXEC.EXE
und$args = '-d'
zu testen. Ich werde sehen, ob ich versuchen kann, es mitPSFTP
.PSEXEC
weil ich weiß, es schreibt einige seiner Ausgabe zu STDERR.Geben diesem einen Versuch
Gibt es ein PowerShell bug über
2>&1
machen Fehler-Datensätze. Die[string]
cast funktioniert es.1
.