2017-02-23 1 views
1

J'ai écrit un script Powershell qui utilise psftp.exe pour sauvegarder les fichiers de configuration d'un certain nombre de commutateurs. Les entrailles de la boucle de psftp, adapté de here, sont les suivantes:Appeler PSFTP à partir d'un script Powershell: Comment couper la sortie?

# set up array of psftp commands to run on each switch 
$cmd = @("get $config_file_on_switch $local_filename","quit") 
# 
# pipe those commands to a psftp call 
$cmd | & $path_to_PSFTP -l $user -pw $password $IP_addr_of_switch 
# 
# this is all I'd really like to see on the Powershell console: 
Write-Host $name_of_switch 

Cela fonctionne très bien - le code ci-dessus est dans une boucle qui traverse une liste CSV d'adresses IP de commutation, et il fait ce qu'il faut en termes de collecte de fichiers de configuration. Mais je voudrais supprimer les réponses du commutateur aux commandes psftp. psftp.exe n'a aucun mécanisme pour désactiver la sortie de la console, et essayer de le faire dans Powershell en ajoutant | Out-Null à la fin de la deuxième ligne de code ci-dessus ne supprime pas l'affichage de la sortie du commutateur.

Je dois ajouter que ce problème se produit dans la fenêtre Powershell CLI, pas dans le volet console Powershell ISE.

Des idées sur la façon de museler psftp dans ce script?

Répondre

1

psftp ne doit pas écrire des choses dans le flux de sortie standard qui est tout ce que fonctionne out-null.

Vous pouvez essayer de rediriger tous les flux possibles vers le flux de sortie standard à l'aide de *>&1. Par exemple:

Write-host "You can't see me" *>&1 | Out-Null 

Ou dans votre cas:

$cmd | & $path_to_PSFTP -l $user -pw $password $IP_addr_of_switch *>&1 | Out-Null 
+1

Bien fait; '*> $ null' est une alternative plus courte. – mklement0