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 :

execution de commande dans VBS


Sujet :

VBScript

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 125
    Par défaut execution de commande dans VBS
    Bonjour,

    mon script est censsé scanner les 4 Premiers niveau d'une arborecence et d'executer une commande SETACL sur chacun d'eux.
    envoyer le resultat dans un fichier qui à pour nom le chin du repertoire scanné

    probleme j'ai du mal à integrer ma commande dans le script.

    Message d'erreur :
    ](31, 44) Erreur de compilation Microsoft VBScript: Fin d'instruction attendue
    Mon code
    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
     
     
    Dim oFSO,oFld
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    stRep = "d:\users"
    LectRep stRep 
    Dim Subnumber,Chemin 
     
    Subnumber = 0
    '
    ' Fonction récursive de parcours de répertoire
    '
    Sub LectRep (stR)
    Dim Chemin_def
    Do While Subnumber <> 4
     For each oFld in  oFSO.GetFolder(stR).SubFolders
     Subnumber = Subnumber + 1
     Chemin = Replace(oFld.Path,"\","-")
     Chemin_def = Replace(Chemin,":","_")
       Wscript.Echo "--------------- " & oFld.PAth & "-----------------"
      WScript.Echo Chemin_def
       Commande (oFld.PATH)   
       LectRep oFld.PATH
     Next
    Loop
    end sub
    '
    ' commande à executer
    '
    Sub Commande (stR)
    Set fso2 = CreateObject("Scripting.FileSystemObject")
    set shl = createobject("wscript.shell")
    shl.run "cmd  /K setacl.exe -on -ot file -actn list -lst f:sddl;w:d,s,o,g;i:n;s:y -rec no -bckp C:\LOGS\ACL\"Chemin_def".txt",0,True
    End sub

    Merci de votre aide

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    salut ,

    Un problème de " ..
    - En Vbscript l'opérateur de concaténation de chaine est le : &
    - Si tu dois mettre des " dans une chaine il faut les doubler..

    mieux vaut passer par une variable chaine intermédiaire pour ta commande ce qui te permet de l'afficher :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (...)
    Dim stCde
    stCde = "cmd  /K setacl.exe -on -ot file -actn list -lst f:sddl;w:d,s,o,g;i:n;s:y -rec no -bckp C:\LOGS\ACL\" & Chemin_def & ".txt"
    msgbox stCde
    shl.run stCde,0,True

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 125
    Par défaut
    Merci cela fonctionne sur le premier niveau.
    cependant je n'arrive pas à passer au niveau en dessous.
    je n'ai pas de message d'erreur.
    mon prompt continu de touner sans fin.

    j'ai juste modifier la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    stCde = "cmd  /K setacl.exe -on" &" " & oFld.Path & " " &"-ot" & " " &"file"& " " &"-actn" & " " &"list" &" " &"-lst" & " " &"f:sddl;w:d,s,o,g;i:n;s:y"&" "&"-rec"&" "&"no"&">"& " " &"C:\LOGS\ACL\" & Chemin_def & ".txt"
    Merci pour votre Aide

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par micka180 Voir le message
    ....
    j'ai juste modifier la commande

    ...
    pourquoi ? éclater ta chaine en plusieurs petite chaine est inutile .. !

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 125
    Par défaut
    Car sans cela ma commande est de la forme :
    setacl.exe -ond:\users\A1-ot
    les options de la commande ne sont pas separées, ce qui fait planter la commande.

    j'utilise les "" comme espace.

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 125
    Par défaut
    voila ce que j'obtiens avec execution de commande.

    --------------- D:\Users\A1-----------------
    D-Users-A1
    sans execution de commande

    --------------- D:\Users\A1-----------------
    D-Users-A1
    --------------- D:\Users\A1\A2-----------------
    D-Users-A1-A2
    --------------- D:\Users\A1\A2\A3-----------------
    D-Users-A1-A2-A3
    --------------- D:\Users\A1\A2\A3\A4-----------------
    D-Users-A1-A2-A3-A4
    --------------- D:\Users\B1-----------------
    D-Users-B1
    --------------- D:\Users\B1\B2-----------------
    D-Users-B1-B2
    --------------- D:\Users\B1\B2\B3-----------------
    D-Users-B1-B2-B3
    --------------- D:\Users\B1\B2\B3\B4-----------------
    D-Users-B1-B2-B3-B4

  7. #7
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par micka180 Voir le message
    Car sans cela ma commande est de la forme :

    les options de la commande ne sont pas separées, ce qui fait planter la commande.

    j'utilise les "" comme espace.
    non tu n'utilise pas les "" comme espace tu concatène ta chaine avec un espace ... il te suffit de mettre directement l'espace dans ta chaine pas la peine d'utiliser 2 chaines...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stCde = "cmd  /K setacl.exe -on " & oFld.Path & " -ot file -actn list -lst f:sddl;w:d,s,o,g;i:n;s:y -rec no> C:\LOGS\ACL\" & Chemin_def & ".txt"
    ensuite pour ta boucle sans fin ...dans ta procédure command à quoi sert la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set fso2 = CreateObject("Scripting.FileSystemObject")
    pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set shl = createobject("wscript.shell")
    j'aurais bien mis cette ligne en dehors de ta procédure (comme oFso) de façon à ce que shl soit une variable globale initialisé une seule fois et pas à chacun de tes répertoires..

    pour tenter de comprendre ce qui ce passe dans ta boucle rajoute une ligne affichant le répertoire testé par exemple...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Commande (stR)
    wscript.echo stR
    stCde = "cmd  /K setacl.exe -on " & oFld.Path & " -ot file -actn list -lst f:sddl;w:d,s,o,g;i:n;s:y -rec no> C:\LOGS\ACL\" & Chemin_def & ".txt"
    shl.run stCde,0,True
     
    End sub
    Il me semble aussi incongru le fait que tu n'utilise pas le paramètre stR dans ta commande ?

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 125
    Par défaut
    j'ai ajouté le
    wscript.Echo stR
    comme tu me la conseillé et fais le menage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set shl = createobject("wscript.shell")
    en glogal

    suppression de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set fso2 = CreateObject("Scripting.FileSystemObject")
    qui n'avait aucune utilité.

    le traitemant se fait bien sur le premier niveau mais pas au-dela
    --------------- D:\Users\A1-----------------
    D-Users-A1
    D:\Users\A1
    Exit code: 259 , 0103h
    je pense que le souci se situ sur la fin d'execution de commande.
    faire un vidage buffer apres execution de la commande par exemple ?

  9. #9
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    J'ai raté ton message de 10h56...

    mais dans ton dernier message ton problème semble du à ta commande setacl.exe avec une erreur dès la première exécution ..

    En ligne de commande cette commande fonctionne t'elle ..?

  10. #10
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 125
    Par défaut
    Mieux que cela.

    Elle s'execute parfetement.
    Elle crée mon fichier et inscrit le rapport à l'intérieur.
    "\\?\D:\Users\A1",1,"O:S-1-5-21-1572353085-412953175-1904571539-17780GUDA;OICI;FA;;;BA)(A;OICI;FA;;;SY)(A;;FA;;;S-1-5-21-1572353085-412953175-1904571539-17780)(A;OICIIO;GA;;;CO)(A;CI;FA;;;BU)(A;CI;FA;;;BU)(A;OIIO;FA;;;BU)(A;CI;FA;;;BU)(A;OIIO;FA;;;DU)(A;CI;FA;;;DU)"

    SetACL finished successfully.
    J’ai testé avec une autre commande Dir par exemple, même rengaine

  11. #11
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par micka180 Voir le message
    Mieux que cela.

    Elle s'execute parfaitement....
    Tu as comparer la commande exécutée "manuellement" avec la sortie donnée par :
    ...

    tu pourrai aussi rajouter des messages avant et après le Run afin de t'assurer de l'endroit ou s'effectue l'Exit code...

    Citation Envoyé par bbil Voir le message
    Il me semble aussi incongru le fait que tu n'utilise pas le paramètre stR dans ta procedure commande ?
    rajoute aussi tout en haut de ton script la ligne
    qui t'oblige de déclarer toutes tes variables et ainsi seras un révélateurs de tes erreur sur la portée des variables utilisées...

    (comme par exemple Chemin_def utilisé dans ta procédure command)

  12. #12
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 125
    Par défaut
    oui j'ai fait la comparéson entre commande manuelle et stCde, s'est la meme chose.

    je fais le test pour les messages avant et apres le run.

    Merci

  13. #13
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 125
    Par défaut
    voici ce que j'ai mis en test.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    msgbox stCde
    WScript.Echo stCde
    WScript.Echo "coucou"
    shl.run stCde,0,True
    WScript.Echo stCde
    End Sub
    resultat

    --------------- D:\Users\A1-----------------
    D-Users-A1
    D:\Users\A1
    cmd /K setacl.exe -on D:\Users\A1 -ot file -actn list -lst f:sddl;w:d,s,o,g;i:n;s:y -rec no > C:\LOGS\ACL\D-Users-A1.txt
    coucou
    le programme n'esxecute pas le
    WScript.Echo stCde
    positionné apres le
    shl.run stCde,0,True
    je suis à court d'idées

  14. #14
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    et pas de message d'erreur ?

    enlève la redirection vers le log ( > C:\LOGS\A....) voir si tu vois quelque-chose à l'écran..

  15. #15
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 125
    Par défaut
    c'est le cmd /K qui faisait bloquer.
    setACL n'est pas une commande interne.

    avec CMD /C
    pas de probleme.

    maintenant je dois lui trouver une condition de sortie apres qu'il est sacnné les 4 sous niveau.

    Encore Merci pour ton aide

  16. #16
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 125
    Par défaut
    Pour qui cela pourrait intéresser voici le script complet.

    Il scan sous les 4 premiers sous niveaux de chaque répertoires racines
    et exécute une commande de récupération des ACL par SETACL
    Stock les fichiers sous la forme lecteur-nom_rep-sous-rep.txt.

    Merci encore à Bbil pour son aide.


    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
    Dim oFSO,oFld
    Dim Chemin_def
    Dim Subnumber,Chemin
    Dim stRep_log
     
     
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set shl = createobject("wscript.shell")
     
    stRep = "d:\users" 'Emplacement à Scanner
    stRep_log ="C:\logs\ACL"'Stockage des Fichiers ACL
    LectRep stRep 
     
    Subnumber = 0
    '
    ' Fonction récursive de parcours de répertoire
    '
    Sub LectRep (stR)
    If Subnumber < 4 Then 'ici le nombr de sous repertoires à scanner
     For each oFld in  oFSO.GetFolder(stR).SubFolders
      Subnumber = Subnumber + 1
      Chemin = Replace(oFld.Path,"\","-")
      Chemin_def = Replace(Chemin,":","")
      Wscript.Echo "--------------- " & oFld.PAth & "-----------------"
      WScript.Echo Subnumber
      WScript.Echo Chemin_def
      Commande (oFld.PATH)'appel de la commande
      LectRep oFld.PATH 'appel de la recursivitée sur les sous repertoires  
     Next
     Else
     Subnumber = 0
    End If
     
     
     
     
    end sub
    '
    ' commande à executer
    '
    Sub Commande (stR)
    Dim stCde
    wscript.echo stR
    stCde = "cmd  /C setacl.exe -on " & stR & " -ot file -actn list -lst f:sddl;w:d,s,o,g;i:n;s:y -rec no -bckp C:\LOGS\ACL\" & Chemin_def & ".txt"
    WScript.Echo stCde
    shl.run stCde,0,True
    WScript.Echo stCde
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/09/2012, 16h32
  2. Execution de commandes dans un find
    Par lavazavio dans le forum BSD
    Réponses: 6
    Dernier message: 16/09/2012, 10h55
  3. [2K5] Execution de commande dans un curseur
    Par duc@ti dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 10/06/2008, 14h46
  4. Executer commande dans un processus fils !
    Par jérôme.D dans le forum POSIX
    Réponses: 6
    Dernier message: 23/11/2006, 22h14
  5. [MySQL] executer une commande php contenu dans une variable
    Par Stopher dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/11/2006, 15h44

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