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.