IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Exécuter un script en boucle sous conditions


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 24
    Points
    24
    Par défaut Exécuter un script en boucle sous conditions
    Bonjour,
    Je suis en train de mettre en place un script que je vais intégrer dans mon outil de gestion de parc.
    Avec votre aide (déjà merci à Cachlab pour une partie du script), j'ai pu commencer à y travailler, mais là j'ai de nouveau besoin d'un coup de main.

    Voici mon dilemme.
    J'ai un script qui lit le contenu d'un fichier texte, pour en ressortir une variable qui sera réutilisée par la suite.
    Pour un fichier c'est good.
    Maintenant, pour aller jusqu'au bout du raisonnement, j'aurai besoin d'utiliser ce script en boucle sur tous les fichiers d'un répertoire. Ces fichiers auront un nom aléatoire basé sur un GUID (qu'on peut réutiliser ?), et les contenus des fichiers ont la même structure (propriete=valeur, 1 seule ligne). Ces fichiers proviennent des postes du parc info, qui envoient ce petit texte dans un répertoire partagé pour traitement.

    Mon idée serait donc de lancer ce script en boucle sur chaque fichier, s'il y en a plusieurs, et de supprimer ces fichiers jusqu'à vider le répertoire.

    Avez vous des idées ?

    Voici mon début de code, sachant que je suis complètement novice en scripting, et que toute suggestion est la bienvenue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Const ForReading = 1
    Dim oFSO, variable(2)
    Set OFSO = WScript.CreateObject("Scripting.FileSystemObject")
     
    fichier_guid = "S:\Temp\Guid.txt"
     
    Set lect = oFso.OpenTextFile(fichier_guid, ForReading)
    While Not lect.AtEndOfStream
    Ligne = lect.ReadLine
    propriete = Left(Ligne,InStrRev(Ligne,"="))
    value = right(Ligne, len(Ligne) - len(Propriete))
    if propriete = "GUID=" Then variable(1) = value
    Wend
    lect.close
     
    Set objShell = WScript.CreateObject("WScript.Shell")
    objShell.Run ("S:\mon_program.exe cmd:DeleteItem itemguid:" & value)

  2. #2
    Membre éprouvé Avatar de cubitus91
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 726
    Points : 933
    Points
    933
    Par défaut
    hello,
    je te propose de t'abonner aux events sur le repertoire en question de création de fichier et d'éxécuter ce que tu souhaites faire pour ensuite supprimer le fichier en question.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    Option Explicit 
    'Constantes
    Const cstrIntervalle = "2" 'Interval de check en seconde
    Const cstrDrive = "C:"
    Const cstFolder = "\\scripts\\"
    Const cstrComputer = "."
    Const cintForReading = 1
    'Globale variable
    Dim objWMIService,strQuerry,colObjEvents,objFileSystemObject,ObjFile
    Dim arrLineValue
    'Instancier les objects
    Set objWMIService = GetObject( "winmgmts:" & _
        "{impersonationLevel=impersonate}!\\" &_ 
        cstrComputer & "\root\cimv2" )
    'Creation de la requete de monitoring
    strQuerry = "Select * From __InstanceOperationEvent" _
        & " Within " & cstrIntervalle _
        & " Where Targetinstance Isa 'CIM_DataFile'" _
        & " And TargetInstance.Drive='" & cstrDrive & "'"_
        & " And TargetInstance.Path='" & cstFolder & "'"
    Set colObjEvents = objWMIService.ExecNotificationQuery(strQuerry) 
    Do
     Dim objEvent,objTargetInst
     'Attend le déclenchement d'un nouvel evenement 
     Set objEvent = colObjEvents.NextEvent()
        Set objTargetInst = objEvent.TargetInstance
     
        Select Case objEvent.Path_.Class 
     
            ' If it is file creation or deletion event
            ' just echo the file name
     
            Case "__InstanceCreationEvent" 
                WScript.Echo "Created: " & objTargetInst.Name 
                Set objFileSystemObject = WScript.CreateObject("Scripting.FileSystemObject")
                Set ObjFile = objFileSystemObject.OpenTextFile(objTargetInst.Name, cintForReading)
       While Not ObjFile.AtEndOfStream
        arrLineValue= Split(ObjFile.ReadLine,"=")
        If (arrLineValue(0) = "GUID") Then 
        WScript.Echo "Valeur du GUID: " & arrLineValue(UBound(arrLineValue))
        End If 
          Wend
          ObjFile.Close()
          If objFileSystemObject.FileExists(objTargetInst.Name) Then
           objFileSystemObject.DeleteFile objTargetInst.Name
           WScript.Echo objTargetInst.Name
       End If 
       Set objFileSystemObject = Nothing
       Set ObjFile = Nothing
            Case "__InstanceDeletionEvent" 
                WScript.Echo "Deleted: " & objTargetInst.Name 
     
            'Event Modification d'un fichier.
            'Case "__InstanceModificationEvent" 
     
        End Select 
        Set objEvent = Nothing
        Set objTargetInst = Nothing
    Loop
    Set objWMIService = Nothing 
    Set colObjEvents = Nothing
    Ce bout de script te fais ce que tu souhaites faire.
    Tu peux modifier pour ajouter l'action que tu dois faire. Je me suis permi de prendre ce que tu avais fait. C'étais un bon début, sauf que j'ai un peu mis mes habitudes dedans. Du genre, pense à mettre l'option explicit qui t'oblige à déclarer tes variables. Apres pour le reste c'est des histoires de conventions de nommages propres à chacun.
    Enfin je termine par une destruction des objets.

    En esperant que cela t'aides. Il faut lancer le script et celui-ci à intervalle définit par la constantes cstrIntervalle [2] si il y a des nouveaux fichiers dans ton répertoire. Le choix de la valeur peux etre important, à toi de voire.
    Cordialement

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 24
    Points
    24
    Par défaut
    Hello Cubitus,
    je te remercie par avance pour ton aide.
    Je regarde cela dès que possible.

    Merci !

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 24
    Points
    24
    Par défaut
    Pas mal du tout

    Juste pour fignoler tout cela dans mon environnement, est-ce-qu'il est possible d'auto-tuer ce script au bout d'un laps de temps, style 60sec histoire qu'il ne soit pas rejoué moulte fois en parallèle.

    En tout cas merci, c'est niquel !!!

  5. #5
    Membre éprouvé Avatar de cubitus91
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 726
    Points : 933
    Points
    933
    Par défaut
    Hello,
    tu peux le faire, mais tu veux que ton script soit actif toute la journée ? si tu veux avoir une notion de temps dans la boucle do ....
    tu fais un wscript.exit
    je te laisse faire la modificartion, je vais pas tout te faire non plus hein
    Cordialement

    Citation Envoyé par jamy69 Voir le message
    Pas mal du tout

    Juste pour fignoler tout cela dans mon environnement, est-ce-qu'il est possible d'auto-tuer ce script au bout d'un laps de temps, style 60sec histoire qu'il ne soit pas rejoué moulte fois en parallèle.

    En tout cas merci, c'est niquel !!!

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 24
    Points
    24
    Par défaut
    Hello !
    Non, le script ne sera pas lancé durant toute la journée. Seulement à la demande et idéalement pendant un laps de temps donné.

    Je regarde pour sortir de la boucle.

    Merci de ton aide pour ton script.

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 24
    Points
    24
    Par défaut
    Hum,
    Bon le newbie que je suis n'arrive pas à faire la modif...
    Un dernier petit coup de main, et je clos le post.

    Merci d'avance,

Discussions similaires

  1. [XL-2007] Boucle sous conditions
    Par joannadax dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/07/2011, 10h11
  2. script qui boucle sous Fx3 et pas sous ie6
    Par Peanut dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/02/2009, 09h43
  3. Exécutions de scripts cgi / perl sous Apache 2
    Par gedeon555 dans le forum Apache
    Réponses: 1
    Dernier message: 31/01/2009, 20h23
  4. Exécuter un script pl/sql sous sql*plus
    Par Dale_L dans le forum Sql*Plus
    Réponses: 1
    Dernier message: 31/10/2008, 15h25
  5. Exécuter des script sous un utilisateur défini...
    Par nguthans dans le forum Apache
    Réponses: 4
    Dernier message: 21/02/2006, 14h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo