[..] Automatisation de Telnet avec collecte du texte console

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Cyril
Niveau 1
Niveau 1
Messages : 1
Enregistré le : mar. 10 janv. 2012 19:15
Status : Hors ligne

[..] Automatisation de Telnet avec collecte du texte console

#1

Message par Cyril »

Bonjour à tous,

Je cherche depuis quelques jours sur les divers forums, je pense m'approcher de la solution mais ça ne fonctionne toujours pas. Je post dans l'espoir de trouver un correcteur ...

Objectif du code:
lancer depuis "cmd.exe" une ligne de commande du type monautoitcompile.exe "login" "password" "ip" "mycmd_VxWorks" "telnet" pour interroger un serveur telnet sur un système distant.

Bon je parviens à me connecter au serveur, me logger puis lancer ma commande.
La fenêtre affiche bien le résultat mais je ne parviens pas à récupérer le texte que ce soit avec StdoutRead ou la fonction WinGetText($handle). Tous les retours sont vides.

Je vous joins le code:

Code : Tout sélectionner

#include <Constants.au3>
dim $loop,$sCmdC264
 
If $cmdline[0] <> 0 Then
    Local $sCmd = ""
    Local $sIP=""
    for $i = 1 to $cmdline[0]
        ;MsgBox(0,"Valeur du parametre n°"&$cmdline[$i]," = "&$cmdline[$i])
        if $i=1 then Local $sUserName = $cmdline[$i]
        if $i=2 then Local $sPassword = $cmdline[$i]
        if $i=3 then Local $sIP= $cmdline[$i]   
        if $i=4 then Local $sCmdC264= $cmdline[$i]     
        if $i>4 then $sCmd &= $cmdline[$i] & " "
    next
EndIf

Local $foo = RunAs ( $sUserName, $sIP, $sPassword, 1, $sCmd,@SystemDir,@SW_HIDE,$STDERR_MERGED)


Send($sCmd & "{ENTER}") 
Send("o " & $sIP & "{ENTER}")   

For $loop = 1 to 3 
      sleep(2000)
      Send($cmdline[$loop] & "{ENTER}")    
   Next
 
Local $handle = WinGetHandle("Telnet " & $sIP)
WinActivate($handle)
WinWaitActive($handle)
Local $text = WinGetText($handle)
MsgBox(0, "Text read was:", $text)

Local $line
    While 1
        $line = StdoutRead($foo)
        If @error Then ExitLoop
        if $line<>"" then MsgBox(0, "$line", $line)
    Wend

    While 1
        $line = StderrRead($foo)
        If @error Then ExitLoop
        if $line<>"" then MsgBox(0, "$line", $line)
    Wend
 
Send("exit" & "{ENTER}")
Send("quit" & "{ENTER}") 

 

En vous remerciant par avance de vos suggestions.
Avatar du membre
leoclem
Niveau 2
Niveau 2
Messages : 18
Enregistré le : mar. 18 janv. 2011 11:15
Status : Hors ligne

Re: [..]Automatisation de Telnet avec collecte du texte cons

#2

Message par leoclem »

Bonsoir,

Ayant été confronté au même problème dans ce sujet :
http://autoitscript.fr/forum/viewtopic.php?f=3&t=6689

Je ne saurais que trop vous conseiller de passer par plink.exe (client putty très léger en lignes de commandes) ainsi que le lien fourni par Tlem à la fin qui permet de le piloter plus simplement.

A très bien fonctionné pour moi en tout cas.

En espérant vous avoir aidé

Bonne soirée
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..] Automatisation de Telnet avec collecte du texte con

#3

Message par matwachich »

D'abords, Send ne marchera pas car votre fenêtre telnet est invisible. Il faut utiliser StdinWrite, en plus les flags de lancement de RunAs ne sont pas bons à mon avis, il faut faire $STDIN_CHILD + $STDOUT_CHILD pour pouvoir lire et écrire dans la console.

En suite, n'ayant pas de telnet sur mon pc (allez savoir pourquoi il n'a pas voulu s'activer...) j'ai pas pu tester, mais voila ce que j'ai fait:
► Afficher le texte
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Répondre