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
?
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:
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
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.