[..] Lire un fichier contenant des noms et Lancer un script

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
ThESeRvEuR
Niveau 4
Niveau 4
Messages : 50
Enregistré le : lun. 07 déc. 2009 10:29
Status : Hors ligne

[..] Lire un fichier contenant des noms et Lancer un script

#1

Message par ThESeRvEuR »

Bonjour à tous,

Je vais essayer d'être clair.
Afin d'améliorer mon script de MAJ, j'aimerais à partir d'une liste de PC, lancer telle ou telle MAJ.

Le problème est que je ne sais pas trop par où commencer.

Mon script inclus déjà cette fonction mais me prend beaucoup de place.

En fait, pour le moment, j'utilise :

Code : Tout sélectionner

$PC1 = PC0001
If @ComputerName = $PC1 Then MAJ_ACROBAT()
 
Dans la mesure du possible (et je ne doute pas des capacité d'AutoIt, et encore moins des votres), je voudrais réussir à faire :
Ma liste = ALL_PC.txt
ALL_PC =
PC0001
PC0002
PC0003
....

Code : Tout sélectionner

If @ComputerName [b]est présent dans ALL_PC.txt[/b] Then MAJ_ACROBAT
Cela me permettrait de nettoyer fortement mon fichier de mise à jour.
D'avance merci
Tout est possible, tout est réalisable, c'est le jeu de la vie...
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#2

Message par Tlem »

Je vais limiter mes propositions à trois exemples :

Code : Tout sélectionner

; Solution N°1 (Pose juste un problème si le nom d'un PC est inclu dans le nom d'un autre PC)
; Genre : PC1 fonctionnera avec PC1 mais aussi avec PC10 ou PC11, PC12, PC13, etc ...
$PCs = FileRead("ALL_PC.txt")
If StringInStr($PCs, @ComputerName) Then MAJ_ACROBAT()


; Solution N°2
; Plus de lignes, mais moins de code compilé.
#Include <File.au3>
$aPCs = _FileReadToArray("ALL_PC.txt")
For $i = 1 To Ubound($aPC) - 1
    If $aPCs[$i] = @ComputerName) Then
        MAJ_ACROBAT()
        ExitLoop
    EndIf
Next
    

; Solution N°3
; Moins de lignes, mais plus de code compilé.
#Include <Array.au3>
#Include <File.au3>
$aPCs = _FileReadToArray("ALL_PC.txt")
If _ArraySearch($aPCs, @ComputerName) Then MAJ_ACROBAT()
Vous avez le choix.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#3

Message par legend »

@Tlem : je trouve que la première est la plus simple. il suffit d'ajouter & @CRLF pour limiter la fin de chaîne recherchée.
moi j'aurais fait avec une regexp qui est plus flexible et précise :P
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#4

Message par Tlem »

La RegExp me plaisait bien aussi, le problème, avec les RegExp, c'est de trouver le bon pattern. Et ça, c'est déjà moins simple que d'utiliser des fonctions déjà toutes faites. :mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
ThESeRvEuR
Niveau 4
Niveau 4
Messages : 50
Enregistré le : lun. 07 déc. 2009 10:29
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#5

Message par ThESeRvEuR »

Merci pour ta réponse Tlem, rapide comme toujours en plus ...

Il est vrai que la solution n°1 est la plus simple.
Mais, à première vue, ça ne fonctionnera puisque mes noms de machine ont la forme :
P8010000
P8010001
P8010002
Je voulais donc tester les deux autres solutions mais, je rencontre une erreur :

Code : Tout sélectionner

 ERROR: _FileReadToArray() called with wrong number of args.
$aPCs = _FileReadToArray($LISTE)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Program Files\AutoIt3\Include\File.au3(188,49) : REF: definition of _FileReadToArray().
Func _FileReadToArray($sFilePath, ByRef $aArray)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
WARNING: $aPC: possibly used before declaration.
For $i = 1 To Ubound($aPC)
~~~~~~~~~~~~~~~~~~~~~~~~~^
ERROR: syntax error
    If $aPCs[$i] = @ComputerName)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
ERROR: $aPC: undeclared global variable.
For $i = 1 To Ubound($aPC)
Tout est possible, tout est réalisable, c'est le jeu de la vie...
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#6

Message par Tlem »

Oui, c'est exact, car j'ai confondu les paramètres de FileListToArray et _FileReadToArray.

Il faut donc remplacer cette ligne :

Code : Tout sélectionner

$aPCs = _FileReadToArray("ALL_PC.txt")
par celle-ci :

Code : Tout sélectionner

_FileReadToArray("ALL_PC.txt", $aPCs)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
ThESeRvEuR
Niveau 4
Niveau 4
Messages : 50
Enregistré le : lun. 07 déc. 2009 10:29
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#7

Message par ThESeRvEuR »

Suite, mais je crois que je n'ai rien compris parce que ça ne veut pas fonctionner :lol:

J'ai bien remplacé la ligne :

Code : Tout sélectionner

$aPCs = _FileReadToArray("ALL_PC.txt")
Par

Code : Tout sélectionner

_FileReadToArray("ALL_PC.txt", $aPCs)
Voici mon bout de code complet pour test :

Code : Tout sélectionner

#Include <Array.au3>
#Include <File.au3>

$NETLOGON = '\\W2008\NETLOGON\Acrobat\'
$LISTE = 'C:\Documents and Settings\Administrateur\Bureau\PMF.txt'

_FileReadToArray ($LISTE, $aPCs)

If _ArraySearch ($aPCs, @ComputerName) Then MAJ_ACROBAT()

Func MAJ_ACROBAT()
RunWait ($NETLOGON & '\Acrobat.exe')
EndFunc
 
Résultat :

Code : Tout sélectionner

WARNING: $aPCs: possibly used before declaration.
ERROR: $aPCs: undeclared global variable.
Apparemment, je dois déclarer la variable $aPCs mais quoi mettre ?
Tout est possible, tout est réalisable, c'est le jeu de la vie...
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#8

Message par Tlem »

A la suite de vos déclarations $NETLOGON et $LISTE, rajoutez :

Code : Tout sélectionner

Global $aPCs
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
ThESeRvEuR
Niveau 4
Niveau 4
Messages : 50
Enregistré le : lun. 07 déc. 2009 10:29
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#9

Message par ThESeRvEuR »

Cool !!! 8)
On y est presque :P

Il reste que le nom de PC y soit ou pas le RunWait se lance ...
Tout est possible, tout est réalisable, c'est le jeu de la vie...
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#10

Message par Tlem »

Effectivement, car le test de _ArraySearch() n'est pas valable.
Soit il faut tester que le retour est supérieur à 0, soit vous testez @error.
Pour ma part, je préfère @error.

Voici un code testé et fonctionnel auquel j'ai rajouté le test du tableau pour éviter une erreur classique.

Code : Tout sélectionner

#Include <Array.au3>
#Include <File.au3>

Global $NETLOGON = '\\W2008\NETLOGON\Acrobat\'
Global $LISTE = 'C:\Documents and Settings\Administrateur\Bureau\PMF.txt'
Global $aPCs

_FileReadToArray ($LISTE, $aPCs)

If Not IsArray ($aPCs) Then
    MsgBox(16, "Erreur", "Erreur de lecture du fichier PMF.txt")
    Exit
EndIf

_ArraySearch ($aPCs, @ComputerName)
If Not @error Then MAJ_ACROBAT()

Func MAJ_ACROBAT()
    RunWait ($NETLOGON & '\Acrobat.exe')
EndFunc
Par contre je n'ai pas touché la fonction MAJ_ACROBAT().
Vous ne faites aucun test de l'installation, donc si Acrobat.exe n'existe pas, rien ne se passe et vous n'en savez rien. ^^
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
ThESeRvEuR
Niveau 4
Niveau 4
Messages : 50
Enregistré le : lun. 07 déc. 2009 10:29
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#11

Message par ThESeRvEuR »

Je testerai ça demain :wink: ...

Par contre, pour ma culture à moi, pourquoi inscrire les variables du départ dans Global ?
Tout est possible, tout est réalisable, c'est le jeu de la vie...
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#12

Message par legend »

le contenu d'un variable est stocké dans une ou plusieurs adresses mémoires.
tu dois donc réserver une place a ton variable dans la mémoire de ton pc. cela se passe quand tu déclare ce variable ou quand tu lui attribue une valeur directement (dans la même ligne se passe la déclaration et l'affectation.)
quand tu passe le variable en paramètre la fonction stocke la valeur retournée dans son adresse mémoire.
sauf si tu ne le déclare pas il n'y aura aucune adresse mémoire ou stocker ^^
(je sais pas bien expliquer :P)
Avatar du membre
ThESeRvEuR
Niveau 4
Niveau 4
Messages : 50
Enregistré le : lun. 07 déc. 2009 10:29
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#13

Message par ThESeRvEuR »

legend a écrit :(je sais pas bien expliquer :P)
Humhum ... Effectivement, moi pas compris, mais bon, admettons :D ... Mais merci tout de même pour l'effort, tu as du te relire une paire de fois :P

Bon, tout fonctionne, et je progresse dans la modification de mon script AutoIt (1022 lignes pour le moment) mais j'ai bon espoir.

Une question subsidiaire :
J'ai commencé à créer mes listes mais est-il possible d'inclure dans une liste des catégories (ou des secteurs) et de viser telle ou telle catégorie ? cela éviterais la multiplication de fichier texte.

Exemple :
[INTERNET]
PC001
PC024
PC123
[SECRETARIAT]
PC005
PC015
....
Tout est possible, tout est réalisable, c'est le jeu de la vie...
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#14

Message par Tlem »

Je vois plus ou moins ce que vous voulez faire, mais au-delà de certains paramètres de complexité, la seule solution qui vous reste, c'est une base de donnée !

Soit vous jouez avec SQLight avec les complications que ça implique, soit votre besoin reste simple et dans ce cas, il faudra jouer autrement.
Voici un exemple de fichiers qui pourrait être utilisé :

Exemple 1

Code : Tout sélectionner

PC001     INTERNET
PC005     SECRETARIAT
PC010     SECRETARIAT,INTERNET
PC015     SECRETARIAT
PC024     INTERNET
PC123     INTERNET
ou encore mieux, en fichier .ini

Code : Tout sélectionner

[Liste PC]
PC001=INTERNET
PC005=SECRETARIAT
PC010=SECRETARIAT,INTERNET
PC015=SECRETARIAT
PC024=INTERNET
PC123=INTERNET

[Secretariat]
APP1=$NETLOGON & '\Acrobat.exe'
APP2=$NETLOGON & '\ApplicationBureautique.exe'

[Internet]
APP1=$NETLOGON & '\FTP.exe'
APP2=$NETLOGON & '\ApplicationInternet.exe'
Personnellement, je séparerais la liste des PC et la liste des groupes, afin d'avoir quelque chose de plus clair.
L'avantage du fichier .ini, c'est qu'avec IniReadSectionNames et IniReadSection, vous pouvez construire un ensemble de tableaux, qui vous permettrons un traitement répétitif pour chaque élément. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#15

Message par mikell »

ThESeRvEuR a écrit :Exemple :
[INTERNET]
PC001
PC024
PC123
[SECRETARIAT]
PC005
PC015
....
Fichier d'aide a écrit :A standard ini file looks like:
[SectionName]
Key=Value
C'est vrai que la ressemblance est troublante... :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#16

Message par Tlem »

Comme dit l'expression :
http://www.wat.tv/video/pub-annee-70-ca ... hzrj_.html
► Afficher le texte
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#17

Message par mikell »

@ThESeRvEuR, bien reçu 5/5 le message de Tlem ? il faut donc faire un canada-ini :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
ThESeRvEuR
Niveau 4
Niveau 4
Messages : 50
Enregistré le : lun. 07 déc. 2009 10:29
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#18

Message par ThESeRvEuR »

@Tlem :

Vos dernières solutions ont l'air intéressante mais cela implique de multiplier les scripts qui sont actuellement implantés dans un seul.

Le but ultime serait de comparer une liste à un nom d'utilisateur ou un nom de machine (en fonction des besoins) et d'autoriser ou non (par exemple) l'accès à Internet (via une clé registre, ça fonctionne comme cela chez nous en supprimant l'adresse du Proxy) mais aussi de cibler le lancement de différents scripts installant une imprimante par défaut sur tel ou tel PC ou encore de mapper différents lecteurs réseaux.

Mais là, je crois que je rentre dans une complexité particulière ? non ?
Jusqu'à présent, j'ai suivi mais je crois que catégoriser un fichier .ini qui appelle tel ou tel script risque de complexifier l'ensemble ...

(Je précise tout de même, que je n'ai pas la liberté de créer des GPO sur mon serveur ou des UO sur mon AD)
Modifié en dernier par ThESeRvEuR le jeu. 25 août 2011 12:50, modifié 1 fois.
Tout est possible, tout est réalisable, c'est le jeu de la vie...
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Lire un fichier contenant des noms et Lancer un scr

#19

Message par Tlem »

Il est vrai, que parfois, certaines choses peuvent paraitre compliqué.

Jetez un coup d’œil à l'exemple joint. ;)


PS: Mon pseudo c'est Tlem et non Telm. ^^
Fichiers joints
Exemple.zip
(864 Octets) Téléchargé 90 fois
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre