Bonjour à tous,
Je souhaite automatiser la configuration d'un switch et pour cela j'ai d'abord besoin de me connecter en série avec Putty ou Plink, envoyer quelques commandes, lancer l'invité de commande puis me connecter en FTP depuis un dossier placé sur le pc et transférer des fichier du pc au switch.
Pour cela, je souhaite vérifier ce que me retourne Plink/putty et l'invité de commande afin de ne pas envoyer trop tôt des commandes pour ne pas faire n'importe quoi.
La première partie de mon automatisation fonctionne : je peux me connecter en série via Plink, attendre que le port série renvoie "login" pour envoyer mon login etc. Je suis un peu en aveugle car rien ne s'affiche. Pour savoir où le programme en est, je dois ouvrir le fichier de log mais bon, ça va quand même.
Là où ça se complique c'est lorsque je souhaite faire la même chose mais avec l'invité de commande : je lis bien ce qu'il y a dedans mais impossible d'envoyer la commande souhaitée...
J'utilise des fonctions décrites dans ce lien :
http://www.autoitscript.com/forum/topic ... k-wrapper/
Je les ai adapté à mes besoins. J'utilise ces fonctions (en commentaires les lignes qui me servent pour plink) :
► Afficher le texte
Code : Tout sélectionner
;start the plink session
;func _Start_plink($_plink_loc,$_plinkserver)
func _Start_plink($_plink_loc)
_Plink_close(); close any stray plink sessions before starting
if $_plink_loc = "" then
MsgBox(0, "Error", "Unable to open plink.exe",10)
return false
Exit
endif
#cs
if $_plinkserver = "" then
MsgBox(0, "Error", "Unable to open server",10)
Exit
return false
endif
#ce
$_plinkhandle = Run($_plink_loc,"",@SW_MAXIMIZE, $STDIN_CHILD + $STDOUT_CHILD) ; $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD)
;$_plinkhandle = Run($_plink_loc & " -serial " & $_plinkserver,"",@SW_MAXIMIZE, $STDIN_CHILD+$STDOUT_CHILD)
return $_plinkhandle
endFunc
;Initialize plink session log file === je n'ai pas touché à cette fonction ===
func _Init_plink_log($_plink_logfile)
$_plink_logfile_handle = FileOpen($_plink_logfile, 2)
; Check if file opened for writing OK
If $_plink_logfile_handle = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
return true
endfunc
func _Expect($match_text)
local $text
local $sBuffertext
local $found
local $iBegin = TimerInit()
While 1
if TimerDiff($iBegin) > $_plink_timeout then return false
$text = StdoutRead($_plinkhandle)
MsgBox(0, "Test", $text)
$sBuffertext = $sBuffertext & $text
if $_plink_logging Then
FileWriteLine($_plink_logfile_handle,"**********************NEW SECTION************************")
FileWriteLine($_plink_logfile_handle, $match_text)
FileWriteLine($_plink_logfile_handle, $text)
FileWriteLine($_plink_logfile_handle,"**********************END SECTION************************")
endif
$found = StringRegExp($text,$match_text)
If $found = 1 Then
If $_plink_display_messages Then MsgBox(4096, $match_text, $text, $_plink_display_message_time)
ExitLoop
Endif
sleep(300)
Wend
return $sBuffertext
EndFunc
func _SayPlus($output)
StdinWrite($_plinkhandle, $output & @CR)
endfunc
Voici comment je l'utilise :
► Afficher le texte
Code : Tout sélectionner
#include <PlinkWrapper_Test_cmd.au3>
;Initialize Variables------------------------------------------------------------------------------------------------------------
;$username="admin " ; It seems necessary to put an extra space after the login name. The last character is being cut off.
;$password="admin1 "; It seems necessary to put an extra space after the password. The last characters is being cut off.
$_plink_logging=true ; Turn Logging ON (default is off)
$_plink_display_messages=true ; Turn Screen Messages ON (default is on)
$_plink_display_message_time=300 ; Display message for 5 mins (default 1 sec)
;--------------------------------------------------------------------------------------------------------------------------------
; Initizations-------------------------------------------------------------------------------------------------------------------
;$_plinkhandle=_Start_plink("C:\Program Files\PuTTY\plink.exe","192.168.5.15")
$_plinkhandle=_Start_plink("cmd.exe")
_Init_plink_log("C:\Documents and Settings\Administrator\Desktop\putty2.log")
_Expect("Microsoft Windows XP")
MsgBox(0, "OK", "OK")
_SayPlus("dir")
MsgBox(0, "OK bis", "OK bis")
_Expect("Le volume dans le lecteur C")
Je reçois bien "Microsoft Windows XP", mes 2 fenêtres "OK" et "OK bis" s'ouvrent bien mais après, je ne lis plus rien... Dans ma fonction _Expect, la fenêtre "Test" s'ouvre vide...
Sauriez-vous m'aider ? Je pense que l'invité de commande n'a pas pris en compte le _SayPlus("dir")...