web-dev-qa-db-fra.com

Comment diriger toutes les sorties de l'exécution .exe dans Powershell?

Dans Powershell, je cours psftp.exe qui est la page d'accueil de PuTTY. Je fais ça:

$cmd = "psftp.exe"
$args = '"username@ssh"@ftp.domain.com -b psftp.txt';
$output = & $cmd $args

Cela marche; et j'imprime $output. Mais il n'attrape que des sorties dans cette variable (comme "Le répertoire de travail distant est [...]") et renvoie d'autres sorties vers un type d'erreur comme celui-ci:

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

Cet "Utilisation du nom d'utilisateur ...", etc., ressemble à un message FTP normal. Comment puis-je m'assurer que toutes les sorties sont mises dans $output?

17
JBurace

Le problème est qu'une sortie est envoyée à STDERR et la redirection fonctionne différemment dans PowerShell que dans CMD.EXE.

Comment rediriger la sortie du programme de la console vers un fichier dans PowerShell a une bonne description du problème et une solution de contournement intelligente.

Fondamentalement, appelez CMD avec votre exécutable comme paramètre. Comme ça:

MISE À JOUR

J'ai corrigé mon code pour qu'il fonctionne réellement. :)

$args = '"username@ssh"@ftp.domain.com -b psftp.txt';
$output = cmd /c psftp.exe $args 2`>`&1
16
aphoria

Essayez ceci

$output = [string] (& psftp.exe 'username@[email protected]' -b psftp.txt 2>&1)

Il y a un PowerShell bug à propos de 2>&1 création d'enregistrements d'erreur. Le [string] cast travaille autour de lui.

8
Andy Arismendi