Page 1 sur 1

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

Posté : ven. 01 avr. 2016 14:07
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.

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

Posté : ven. 01 avr. 2016 14:41
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.

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

Posté : ven. 01 avr. 2016 14:58
par TomAijerrie
Utilise DirCreate pour créer un dossier

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

Posté : ven. 01 avr. 2016 15:04
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.

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

Posté : ven. 01 avr. 2016 15:06
par cpomoa
Merci TomAijerrie, cependant l'autoit n'est pas destiné à être utilisé sur le poste distant mais sur le poste emetteur.

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

Posté : ven. 01 avr. 2016 19:37
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

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

Posté : sam. 02 avr. 2016 05:47
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.