2010-11-03 32 views
10

Dans un script batch DOS, j'exécute une seule commande sur un ordinateur distant (également Windows) en utilisant plink. Auparavant, cette commande était uniquement exécutée sur la machine locale et comptait sur le code de retour pour déterminer le succès. Existe-t-il un moyen de récupérer facilement cette information via plink?Obtenir le code retour de plink?

Répondre

6

Ce n'est pas possible avec plink. Le consensus actuel est d'avoir le script distant echo son code de sortie dans un fichier journal, puis d'utiliser pscp pour transférer le fichier journal vers la machine locale.

Voir http://fixunix.com/ssh/74235-errorlevel-capturing-plink.html.

+5

Pour le bénéfice de tous ceux qui lisent aujourd'hui, peut-être cela était vrai quand il a été écrit, mais ce n'est pas plus vrai. La version actuelle de plink renvoie le code de sortie distant lors de l'utilisation du protocole ssh. – richb

+0

... exemples de travail [** ici **] (http://stackoverflow.com/a/2988139/319204) et [** ici **] (http://superuser.com/a/130528). – TheCodeArtist

+3

@richb: Pas exactement vrai. Plink 0.63 réussit (état de sortie 0) lorsqu'une connexion ne peut pas être établie. :-( –

2

avec plink 0,66

C:\Code>echo Y | "C:\Program Files (x86)\PuTTY\plink.exe" [email protected] exit 42 

C:\Code>echo %ERRORLEVEL% 
42 

également pour souci de @John Wiersba quand ne peut pas être une connexion, cela semble être fixé

C:\CodeMisc>echo Y | "C:\Program Files (x86)\PuTTY\plink.exe" [email protected] exit 42 
Unable to open connection: 
Host does not exist 
C:\Code>echo %ERRORLEVEL% 
1 

Notez également la tuyauterie de echo Y ... ce vous permet d'accepter automatiquement l'empreinte du serveur (un peu dangereux pour le moins ... mais notre serveur de connexion est charge équilibrée, de sorte que vous obtenez toujours différentes empreintes digitales :()

Cependant, comme le note @LeonBloy, plink a toujours des conditions de connexion qui renvoient un code de sortie nul. Si vous connaissez votre plage de codes de sortie et que vous ne disposez pas d'un bon moyen de communiquer vers Windows via un fichier. Vous pouvez soit +3 au code de sortie (si vous connaissez le code de sortie ne sera jamais == 253-255) ou vous pouvez appliquer un OU bit à bit (je suggérerais exit $(($?|128)) - en bash).

Ou si vous ne se soucient pas du code de sortie exacte, vous pouvez revenir 2 pour le succès, et zéro pour l'échec. Ainsi, un code de sortie autre que deux indiquerait un échec. En bash ce serait: echo $((($?==0) << 1)). Ce serait de loin la solution polyvalente la plus robuste, mais vous devriez vous assurer que votre code de sortie est enregistré pour la capacité de débogage.

+0

.. Cela semble être corrigé ... jusqu'à un certain point: ''> plink.exe -batch -ssh -i key.ppk [email protected] En utilisant le nom d'utilisateur "pi" Le serveur a refusé notre clé > echo % ERRORLEVEL% '' – leonbloy