[R] Script pour copier des fichiers vers une liste de poste

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
fgouret
Niveau 2
Niveau 2
Messages : 25
Enregistré le : lun. 16 mai 2011 11:19
Localisation : France - 44
Status : Hors ligne

[R] Script pour copier des fichiers vers une liste de poste

#1

Message par fgouret »

Bonjour,

Je voudrais faire un petit script qui permettrait de copier un fichier ou plusieurs vers plusieurs postes.
J'ai créé un fichier salle203.txt avec les noms des postes
et Ensuite j'ai créé un script pour copier, le voici

Code : Tout sélectionner

$file = FileOpen("c:\script\salle203.txt",0)
while 1
$chars = FileReadLine($file)
if @error = -1 then ExitLoop
;MsgBox(1, "Script déployer sur : ", $chars)
RunAsWait("administrateur",@ComputerName,"mpa",1,"c:\script\copysc.exe " & $chars)
WEnd
FileClose($file)
Exit
et le deuxieme qui est appelé par le premier

Code : Tout sélectionner

$result = FileCopy("c:\script\salle203.txt","\\" & $CmdLine[1] & "\c$\script\",9)
if $result = 0 then MsgBox (0,"Copie","Erreur sur Poste : " & $CmdLine[1])
Exit
Le problème c'est que j'au une erreur , la voici

>"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Program Files\Ch\demos\bin\copyscript.au3"
>Exit code: 0 Time: 10.271

De plus il m'affiche la msgbox pour me dire erreur sur poste ...

Je ne comprend pas, est-ce que quelqu'un pouraiit m'aider.

Vous en remerciant par avance.

Franck
Modifié en dernier par fgouret le mer. 25 mai 2011 11:59, modifié 1 fois.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#2

Message par zeshrek »

Tu n'as pas une ligne vide dans ton fichier ? ou un espace ? ou un caractere qui n'a rien a voir avec un om d'ordi ? Ca expliquerai pourquoi il plante sur un ordi.
Sinon, l'ordi en question est bien présent sur le réseau ? Si oui, son disque n'est pas plein ? ou le compte admin a t il été modifié (y en a qui trouvent tres drole de changer les passwords, ou de désactiver les comptes d'admin quand on leur donne les droits d'admin local...)


Sinon, moi le 1er script je l'aurai fait comme ca :

Code : Tout sélectionner

#Include <File.au3>
_FileReadToArray("c:\script\salle203.txt",$char)
For $i = 1 to $char[0]
    ;MsgBox(1, "Script déployer sur : ", $chars)
    RunAsWait("administrateur", @ComputerName, "mpa", 1, "c:\script\copysc.exe " & $chars[$i])
Next
Exit
Moins de lignes de code, de tests...
Et en plus ca a un coté 'propre' qui consiste a ne pas copier un fichier alors qu'il est ouvert par ailleurs (même si c'est en lecture, et donc a priori sans conséquence)
(en fait non, j'aurai pas appelé un script externe, dont je ne vois pas la valeur ajoutée, il suffit que ton runaswait lance la commande dos de copie, ou même mieux, que ton script s'autorelance en administrateur (cf le how-to de tlem a ce sujet) et du coup c'est directement le script qui fait la copie sans passer par un runaswait... Mais bon, c'est pas le sujet du jour ;))
Si vis pacem para bellum
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#3

Message par sksbir »

zeshrek a écrit :.........ou même mieux, que ton script s'autorelance en administrateur (cf le how-to de tlem a ce sujet)....
Moi , j'appelle ça "script réentrant" ( la recherche sur le forum permet de retrouver un petit exemple que j'ai posté ).
la recherche de autorelance ne donne rien. Comment tlem a appelé le concept ?
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#4

Message par zeshrek »

J'étais persuadé que c'était le boss qui avait pondu le script, mais ne fait non...
http://autoitscript.fr/forum/viewtopic.php?f=6&t=4764

Pour info une simple recherche avec les mots
scripts administrateur
permet de trouver ca en moins de 5 minutes....

RTFM !
(Relis Ton Forum Mec !)
:D
Si vis pacem para bellum
fgouret
Niveau 2
Niveau 2
Messages : 25
Enregistré le : lun. 16 mai 2011 11:19
Localisation : France - 44
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#5

Message par fgouret »

Merci pour ta rapidité,

J'ai utilisé ta réponse, il y avait une erreur de syntax, donc j'ai rajouté Global $ char, j'espère que j'ai bien fais, par contre quand je lance le script j'ai tjrs l'erreur :

>"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Program Files\Ch\demos\bin\testcopie.au3"
>Exit code: 0 Time: 7.153

Code : Tout sélectionner

#Include <File.au3>
Global $char
_FileReadToArray("c:\script\salle203.txt",$char)
For $i = 1 to $char[0]
    ;MsgBox(1, "Script déployer sur : ", $chars)
    RunAsWait("administrateur",@ComputerName, "mpa", 1, "c:\script\copysc.exe " & $char[$i])
Next
Exit

Tu n'aurais pas un idée, Merci d'avance.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#6

Message par zeshrek »

Désolé pour l'erreur de syntaxe, je t'avais fait ca a l'arrache, et sans le tester :oops: ...

Pour l'erreur, a ce moment là il faut que tu mettes en place le nécéssaire pour un debug.
moi je verai assez bien un truc du genre :

Code : Tout sélectionner

#include <File.au3>
#include <Array.au3> ; nécéssaire pour le arraydisplay. a supprimer quand le debug sera terminé
Global $char
_FileReadToArray("c:\script\salle203.txt", $char)
_ArrayDisplay($char) ; affiche le contenu du tableau, permet de repérer une ligne vide, un espace inoportue....
For $i = 1 To $char[0]
    ;MsgBox(1, "Script déployer sur : ", $chars)
    ConsoleWrite($i & @TAB & "["&$char[$i]&"]") ; Affiche dans la console le N° de ligne et le nom de l'ordi qui va etre passé en parametre pour voir a quel moment exactement ca plante. Le nom de l'ordi est entre crochet, ce qui permet de détecter un espace qui serait venu en douce. La dernière ligne de la console est celle qui pose probleme.
    RunAsWait("administrateur", @ComputerName, "mpa", 1, "c:\script\copysc.exe " & $char[$i])
Next
Exit
Si vis pacem para bellum
fgouret
Niveau 2
Niveau 2
Messages : 25
Enregistré le : lun. 16 mai 2011 11:19
Localisation : France - 44
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#7

Message par fgouret »

Merci beaucoup,zeshrek

je teste et te tiens au courant.
A+

Franck
fgouret
Niveau 2
Niveau 2
Messages : 25
Enregistré le : lun. 16 mai 2011 11:19
Localisation : France - 44
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#8

Message par fgouret »

Re-Bonjour,

Voici le résultat, du debug

"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Program Files\Ch\demos\bin\debugcopie.au3"
1 [eon9]>Exit code: 0 Time: 68.209

Je ne comprend, ça a l'air bon mais celà ne copie tjrs rien sur le poste eon9

Auriez-vous une idée.

Merci

Franck
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#9

Message par sksbir »

zeshrek a écrit :J'étais persuadé que c'était le boss qui avait pondu le script, mais ne fait non...
http://autoitscript.fr/forum/viewtopic.php?f=6&t=4764
Pour info une simple recherche avec les mots
scripts administrateur
permet de trouver ca en moins de 5 minutes....
RTFM !
(Relis Ton Forum Mec !)
:D
héhé...

- les mots clés que tu proposes : scripts administrateur... ils sont pas mal triviaux tout de même non ? --> 285 résultats trouvés.. aie.. c'est carrément trivial comme mots clés, c'est pas moi, c'est le forum qui le dit. De plus ya aucun rapport avec la choucroute, c'est à dire le concept que je recherche...
bon.. maintenant supposons un instant que je sois assez tortueux pour rechercher "scripts administrateur" ( tu connais le sketch de Bigard avec la chauve-souris ? :lol: )

- Je tombe donc sur "Exécuter un script en tant qu'administrateur" (au milieu des 285 autres réponses ) Ben voui, c'est normal vu ce que j'ai demandé en recherche, mais là encore, le titre n'a aucun rapport avec le concept de réentrance ( ou autorelance, ou autorééxécution, mais c'est bien réentrance qui parait le mieux approprié ).N'importe qui va penser : "tient, ya un gars qui connait pas runas", et va essayer de trouver sa pitance ailleurs... Ou alors, non.. tu aurais voulu que j'ouvre le corps des 285 réponses ?? :lol:

Donc, se faire retoquer parce qu'on n'a pas fait de recherche alors même qu'on avait les mots clés oui.. sinon, je proteste: dans ce cas précis, ta remarque RTFM est aussi pertinente que cet extrait de pure logique féminine:

"Si tu ne sais pas de quoi je parle, alors ne compte pas sur moi pour te le dire"
:P

ps : je vais y rajouter le lien que tu as donné dans le topic que j'ai écrit pour ça : [Ex] Script réentrant, histoire de relier les 2 sujets...
fgouret
Niveau 2
Niveau 2
Messages : 25
Enregistré le : lun. 16 mai 2011 11:19
Localisation : France - 44
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#10

Message par fgouret »

Bonjour,

J'ai aussi essayer celà, vu que tu en parlait, mais pas de copie non plus ??

Code : Tout sélectionner

$strAdminNom = "administrateur"
$strAdminPasswd = "mpa"
; la variable suivante contient le nom du script compilé
$strCommande = "c:\script\testcopie2.exe" [color=#4080FF](c'est le nom du script où l'on est si j'ai bien compris)
[/color]
; on vérifie si on est administrateur ou pas
If Not IsAdmin() Then
    MsgBox(0,"Attention","Je ne suis pas ADMINISTRATEUR !!!")
    ; on exécute à nouveau le script en tant qu'administrateur
    RunAs($strAdminNom, @ComputerName, $strAdminPasswd, 0, $strCommande, @ScriptDir)
Else
    ; ici on met le traitement qu'on veut réaliser en tant qu'administrateur
MsgBox(0, "OK", "Maintenant je suis ADMINISTRATEUR")
    $file = FileOpen("c:\script\salle203.txt",0)
    while 1
    $chars = FileReadLine($file)
    if @error = -1 then ExitLoop
    ;MsgBox(1, "Script déployer sur : ", $chars)
    FileCopy("c:\script\salle203.txt","\\" & $chars & "\c$\script\",9)
    MsgBox(0,"","FIN")
    WEnd
    FileClose($file)
 
    EndIf
Merci qu'est ce que vous en pensez.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#11

Message par zeshrek »

Bin, a priori, ce script devrait marcher... sauf que je viens de penser a un truc idiot.
Tu fais une authentification locale sur la machine ou tourne le script, et non une identification domaine (au cas ou tu serais sur un domaine), ou locale sur la machine de destination. Du coup sur les machines distantes, le compte sur lequel tu es n'est pas reconnu comme admin local.

Alors, je te propose un autre truc. Ca va etre un poil plus lent, mais ca devrait marcher

Code : Tout sélectionner

#include <File.au3>

Global $strAdminNom = "administrateur"
Global $strAdminPasswd = "mpa"
Global $Char
Global $DrvMap
Global $FileCopy

_FileReadToArray("c:\script\salle203.txt", $Char)

For $i = 1 To $Char[0]
    ConsoleWrite($i & @TAB & "[" & $Char[$i] & "]"&@crlf) ; Affichage de debug
    $DrvMap = DriveMapAdd("*", "\\" & $Char[$i] & "\c$\script\", 0, $Char[$i] & "\" & $strAdminNom, $strAdminPasswd) ; on mappe la destination avec le compte admin de la machine de destination et non celui de la machine ou tourne le script 
    $FileCopy = FileCopy("c:\script\salle203.txt", "\\" & $DrvMap & "\*.*", 9)
    If $FileCopy = 0 Then MsgBox(0, "", "ca a merdu !")
    DriveMapDel($DrvMap) ; on démappe, avant de passer au suivant
Next
Exit
@sksbir : le pb des moteurs de recherche c'est effectivement les mots utilisés. mais bon, sur les 285 resultats trouvés, tu en as meme pas une quinzaine a ouvrir pour trouver le bon topic... (pour info, pour moi réentrence ca évoque plus la récursivité que le fait de relancer un script en l'éxécutant en tant qu'admin...) bref, ce topic n'est pas le lieu pour un tel débat.
Si vis pacem para bellum
fgouret
Niveau 2
Niveau 2
Messages : 25
Enregistré le : lun. 16 mai 2011 11:19
Localisation : France - 44
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#12

Message par fgouret »

Merci , bonne idée je te tiens au courant.

A +

Franck
fgouret
Niveau 2
Niveau 2
Messages : 25
Enregistré le : lun. 16 mai 2011 11:19
Localisation : France - 44
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#13

Message par fgouret »

Re-re Bonjour,

Tjrs problème, message "ça a Merdu"
donc j'ai rajouté un msgbox pour voir si drivemapadd me renvoie une erreur et j'ai affiché @error = 1 ( Underfined / other error) C'est pas tres explicite,

Si tu vois autre chose, merci pour ton aide
A +

Franck

Code : Tout sélectionner

#include <File.au3>

Global $strAdminNom = "administrateur"
Global $strAdminPasswd = "mpa"
Global $Char
Global $DrvMap
Global $FileCopy

_FileReadToArray("c:\script\salle203.txt", $Char)

For $i = 1 To $Char[0]
    ConsoleWrite($i & @TAB & "[" & $Char[$i] & "]"&@crlf) ; Affichage de debug
    $DrvMap = DriveMapAdd("*", "\\" & $Char[$i] & "\c$\script\", 0, $Char[$i] & "\" & $strAdminNom, $strAdminPasswd) ; on mappe la destination avec le compte admin de la machine de destination et non celui de la machine ou tourne le script
    MsgBox(0,"drivemap",@error)
    $FileCopy = FileCopy("c:\script\salle203.txt", "\\" & $DrvMap & "\*.*", 9)
    If $FileCopy = 0 Then MsgBox(0, "", "ca a merdu !")
    DriveMapDel($DrvMap) ; on démappe, avant de passer au suivant
Next
Exit
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#14

Message par zeshrek »

Tu serais pas sous seven des fois ?
Parceque je viens de voir que le drivemapadd fonctionne bien au boulot ou je suis sous XP, mais pas a la maison ou je suis sous seven...
Si d'autres veulent/peuvent confirmer...
Si vis pacem para bellum
fgouret
Niveau 2
Niveau 2
Messages : 25
Enregistré le : lun. 16 mai 2011 11:19
Localisation : France - 44
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#15

Message par fgouret »

bonjour,

Je suis sous XP pro sp2, et quand je met seulement la ligne Drivemapadd, celà ne me connecte pas de lecteur Bizarre.

A +

Franck
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#16

Message par sksbir »

Il faut que tu débugges ça au plus près:

rajoute ça dans ton script avant la msgbox d'erreur:

Code : Tout sélectionner

msgbox(0,"test", "\\" & $Char[$i] & "\c$\script\" & ", 0, " & $Char[$i] & "\" & $strAdminNom & ",pass=" &  $strAdminPasswd)
Ensuite, ouvres un explorateur,
outils--> connecter un lecteur reseau --> se connecter sous un nom d'utilisateur différent

Tu utilises les infos de la box pour renseigner le chemin, le user et le mot de passe.
et là, tu verras déjà si ça fonctionne "à la main"...
fgouret
Niveau 2
Niveau 2
Messages : 25
Enregistré le : lun. 16 mai 2011 11:19
Localisation : France - 44
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#17

Message par fgouret »

Merci @sksbir

J'essaye
a +
fgouret
Niveau 2
Niveau 2
Messages : 25
Enregistré le : lun. 16 mai 2011 11:19
Localisation : France - 44
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#18

Message par fgouret »

bonjour @sksbir,

J'ai fais le test comme tu m'a dit :

Donc ta msgbox me renvoie :

\\eon9\c$\script, 0,eon9\administrateur,pass=mpa

la msgbox drivemap renvoie : 0
et apres ça a merdu...

Donc Pb,
J'ai fait comme tu as dit avec explorer "se connecter avec un utilisateur different
nom utilisateur : eon9\administrateur et mdp : mpa et là ça fonctionne en manuel...

Je ne sais pas quoi faire, je ne comprend pas .

Encore merci pour votre aide.

A +

Franck
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#19

Message par sksbir »

fgouret a écrit :bonjour @sksbir,
J'ai fais le test comme tu m'a dit :
Donc ta msgbox me renvoie :
\\eon9\c$\script, 0,eon9\administrateur,pass=mpa
la msgbox drivemap renvoie : 0
et apres ça a merdu...
Donc Pb,
J'ai fait comme tu as dit avec explorer "se connecter avec un utilisateur different
nom utilisateur : eon9\administrateur et mdp : mpa et là ça fonctionne en manuel...
Je ne sais pas quoi faire, je ne comprend pas .
Encore merci pour votre aide.
A +
Franck
Bon, essaye de remplacer "*" par une vraie lettre (libre) du genre "O:"
Ensuite, essaye de remplacer "\\eon9\c$\script" par "\\eon9\c$" : même si c'est faisable à la main dans l'explorateur, il n'est pas sûr que drivemapadd accepte autre chose que le point de montage lui-même au lieu d'un de ses sous-dossiers.
fgouret
Niveau 2
Niveau 2
Messages : 25
Enregistré le : lun. 16 mai 2011 11:19
Localisation : France - 44
Status : Hors ligne

Re: [..] Script pour copier des fichiers vers une liste de p

#20

Message par fgouret »

merci,

Il n'y aurait pas une erreur dans la ligne:

$FileCopy = FileCopy("c:\script\salle203.txt", "\\" & $DrvMap & "\*.*", 9)

je ne comprend pas trop la destination "\\" & $DrvMap & "\*.*" et je ne comprend pas vraiment ce qu'il va avoir dans la variable $DrvMap

qu'en pensez-Vous ?

Autrement je vais faire le test que tu as dit

A +
Répondre