[R]Controle du contenu d'une fenetre dos executant psexec

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
cpomoa
Niveau 1
Niveau 1
Messages : 4
Enregistré le : ven. 01 avr. 2016 13:47
Status : Hors ligne

[R]Controle du contenu d'une fenetre dos executant psexec

#1

Message par cpomoa »

Bonjour à tous,

je souhaiterai obtenir de l'aide afin de patienter entre une suite de commandes envoyées avec send dans une console dos qui exécute psexec afin de n'envoyer la suite des commandes que lorsque la précédente est bien finie.En effet si une machine est bridée et que l'invite de commande est désactivé tout le programme plante et envoi les commande sur la première fenêtre disponible, il est aussi possible qu'une commande prenne plus de temps que prévu dans la pause.
Je précise que je suis débutant avec autoit.

Code : Tout sélectionner

Func _envoi()

sleep(15000)
Send ("c: {enter}")
sleep(3000)


Send ("net use x: \\172.23.197.193\diffusion /user:UTILISATEUR PASSWORD {enter}")

sleep(5000)


Send ("mkdir c:\diff {enter}")
sleep(2000)

Send ("x: {enter}")
sleep(2000)

Send ("cd moway {enter}")
sleep(2000)

Send ("copy /y moway.exe c:\diff\ {enter}")
sleep(2000)

Send ("c: {enter}")
sleep(2000)

Send ("net use x: /delete {enter}")
sleep(2000)

Send ("exit {enter}")
sleep(2000)

EndFunc


Exit
J'espère avoir été clair dans ma demande.
Par avance merci.
Modifié en dernier par cpomoa le sam. 02 avr. 2016 05:49, modifié 1 fois.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..]Controle du contenu d'une fenetre dos executant psexec

#2

Message par walkson »

Bonjour,
Vous devriez utiliser la commande Run(), voir l'aide.
To run DOS (console) commands, try Run(@ComSpec & " /c " & 'commandName', "", @SW_HIDE) ; don't forget " " before "/c"
Sur le forum, il y a de nombreuses demandes à ce sujet.
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: [..]Controle du contenu d'une fenetre dos executant psexec

#3

Message par TomAijerrie »

Utilise DirCreate pour créer un dossier
cpomoa
Niveau 1
Niveau 1
Messages : 4
Enregistré le : ven. 01 avr. 2016 13:47
Status : Hors ligne

Re: [..]Controle du contenu d'une fenetre dos executant psexec

#4

Message par cpomoa »

Merci pour votre réponse cependant la fenêtre est déjà lancée et elle va charger une liste d'adresse ip contenu dans un fichier .txt, il s'agit bien de commande type dos mais dans un invite de commande déjà lancé.
je met le code entier peu être que ça sera plus clair.Comme je débute il y a des messagebox pour vérifier que j'ai la bonne information dans mes variables.

Run ("C:\diffusion\diffusion.bat //b")
pour information ce fichier .bat contient :
c:\pstools\psexec @C:\diffusion\ipenligne.txt -u administrateur -p PASSWORD cmd.exe
C'est dans cette fenêtre que vont aller les commandes.

Code : Tout sélectionner

$fichier = "ip.txt"
$count = _FileCountLines($fichier)

;fonction ci-dessous pour compter le nombre de ligne et donc le nombre d ip et donc nombre de test de ping puis le nombre d'étape d'envoi
Func _FileCountLines($sFilePath)
    Local $N = FileGetSize($sFilePath) - 1
;~  If @error Or $N = -1 Then Return 0
;~  Return StringLen(StringAddCR(FileRead($sFilePath, $N))) - $N + 1
    Local $hFile, $sFileContent, $aTmp
    $hFile = FileOpen($sFilePath, 0)
    If $hFile = -1 Then Return SetError(1, 0, 0)
    $sFileContent = StringStripWS(FileRead($hFile), 2)

    FileClose($hFile)
    If StringInStr($sFileContent, @CR) Then
        $aTmp = StringSplit(StringStripCR($sFileContent), @LF)

    ElseIf StringInStr($sFileContent, @CR) Then
        $aTmp = StringSplit($sFileContent, @CR)
    ElseIf Not $sFileContent = "" Then
        $aTmp=StringLen(StringAddCR(FileRead($sFilePath, $N))) - $N + 1
    Else
        Return SetError(2, 0, 0)
    EndIf
    If IsArray($aTmp) Then
    Return $aTmp[0]
Else
    Return $aTmp
    EndIf
EndFunc  ;==>_FileCountLines


For $i = 1 To $count step 1
$file_dhcp = FileOpen("ip.txt", 0)
$dhcp = FileReadLine($file_dhcp, $i)

MsgBox(164, "IP", $dhcp)
MsgBox(164,"ETAPE","ETAPE NUMERO : "& $i)

sleep(500)

    ; Ping la variable $dhcp qui contient les ip de ip.txt avec timeout à 250ms.
    Local $iPing = Ping($dhcp, 250)
MsgBox(164, "RESULTAT PING : ", $iPing)

if $iPing=0 Then
MsgBox(164, "RESULTAT PING : ", $dhcp &" : n'est pas en ligne"& $iPing)
$File = "ipenligne.txt"

Else
	MsgBox(164, "RESULTAT PING : ", $dhcp &" : est en ligne"& $iPing)


$File = "ipenligne.txt"
$Text = $dhcp&@CRLF
FileWrite($File, $Text)

EndIf

Next

sleep(3000)
Run ("C:\diffusion\diffusion.bat //b")

;on compte le nbre de lignes du nouveau fichier
$fichier2 = "ipenligne.txt"
$count2 = _FileCountLines($fichier2)


;MsgBox(164, "IP", $count2)





For $i = 1 To $count2 step 1
Call (_envoi)
sleep(500)

Next


sleep(3000)
filedelete("c:\diffusion\ipenligne.txt")

Func _envoi()

sleep(15000)
Send ("c: {enter}")
sleep(3000)


Send ("net use x: \\172.23.197.193\diffusion /user:cpomoa cpomoa {enter}")

sleep(5000)


Send ("mkdir c:\diff {enter}")
sleep(2000)

Send ("x: {enter}")
sleep(2000)

Send ("cd moway {enter}")
sleep(2000)

Send ("copy /y moway.exe c:\diff\ {enter}")
sleep(2000)

Send ("c: {enter}")
sleep(2000)

Send ("net use x: /delete {enter}")
sleep(2000)

Send ("exit {enter}")
sleep(2000)

EndFunc


Exit


Si quelqu'un a une idée ou une autre façon de procéder pour le même résultat, merci d'avance.
cpomoa
Niveau 1
Niveau 1
Messages : 4
Enregistré le : ven. 01 avr. 2016 13:47
Status : Hors ligne

Re: [..]Controle du contenu d'une fenetre dos executant psexec

#5

Message par cpomoa »

Merci TomAijerrie, cependant l'autoit n'est pas destiné à être utilisé sur le poste distant mais sur le poste emetteur.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..]Controle du contenu d'une fenetre dos executant psexec  

#6

Message par orax »

On devrait pouvoir exécuter un script batch directement sur l'ordi distant, même s'il n'est pas déjà présent (avec -c).
psexec a écrit :-c
Copie le programme spécifié sur le système distant pour l'exécution. Si vous omettez cette option, l'application doit se trouver dans le chemin du système sur le système distant.
Ce script batch contiendrait les commandes contenues dans la fonction _envoi().

La commande psexec deviendrait :

Code : Tout sélectionner

psexec @C:\diffusion\ipenligne.txt -u administrateur -p PASSWORD -c batch.bat
Et batch.bat serait :

Code : Tout sélectionner

c:
net use x: \\172.23.197.193\diffusion /user:cpomoa cpomoa
mkdir c:\diff
x:
cd moway
copy /y moway.exe c:\diff\
c:
net use x: /delete
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
cpomoa
Niveau 1
Niveau 1
Messages : 4
Enregistré le : ven. 01 avr. 2016 13:47
Status : Hors ligne

Re: [..]Controle du contenu d'une fenetre dos executant psexec

#7

Message par cpomoa »

Un grand merci à toi Orax je viens d'essayer et ça fonctionne très bien du coup l'autoit me sert plus qu'à gérer la listes des ip et le ping.
Je passe en résolu.
Répondre