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 :

Ajouter des Droit NTFS sur une liste de dossiers


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Ajouter des Droit NTFS sur une liste de dossiers
    Bonjour,

    Je suis actuellement à la recherche d'un script ou une commande qui me permet d'ajouter un utilisateur en controle total sur un dossier.
    La difficulté est que le nom de l'utilisateur est le nom du dossier.

    Explication :

    J'ai un dossier dans lequel mes users ont leurs dossiers qui leurs sont propres.
    Le dossier de chaque utilisateur est nommé par le nom du user.
    Je doit pour chaque dossier d'utilisateur Ajouter les droits NTFS de ce users sur sont dossier.

    J'ai vu les commandes Subinacl et CACLS.exe, le problème c'est comment faire pour lire le nom du dossier ?
    Si je devais faire un Algo ce serai :

    LIRE nom du dossier (Exemple le dossier s'appelle toto)
    Pour Dossier toto ajouter droit NTFS pour user toto avec controle total sans toucher au autres droits
    Les droits appliqués doivent bien entendu prendre compte des dossiers et fichiers descendant.

    J'espère avoir été assez clair dans mes explications. Merci d'avance a ceux et celle qui pouront me filer un coup de main


    J'ai une erreur au code que l'on ma proposé et que j'ai que légèrement modifié, et j'ai beau chercher je ne vois pas d'où ça pourrai venir.

    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
     
     
    strComputer = "."
    Racine = "C:\general"
    Set objWMIService = GetObject("winmgmts:" _
     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set wShell = server.createObject("wscript.shell")
     
    Set colSubfolders = objWMIService.ExecQuery _
     ("Associators of {Win32_Directory.Name='"& racine &"'} " _
     & "Where AssocClass = Win32_Subdirectory " _
     & "ResultRole = PartComponent")
     
    ' on parcourt les sous-répertoire du répertoire racine
    For Each objFolder in colSubfolders
     'on extrait le nom du répertoire
     nomrep = Replace(objFolder.Name, racine & "\", "")
     
     'on construit la ligne de commande
     lignedecommande = "C:\Cacls.exe "& objFolder.Name &"/T /G " & nomrep & ":F"
     
     'et on l'exécute
     wShell.run lignedecommande 
    Next
    Mon dossier dans lequel se trouve les dossiers auquel on doit ajouter les droits est c:\general

    Pour la ligne de commande j'ai trouvé comment utiliser Cacls. Par exemple, pour donner le droit d'accès en "Controle Total" à l'utilisateur "Administrateur" sur le répertoire "D:\test", on utiliserait la commande suivante :

    cacls d:\test /G administrateur:F (ensuite restera juste a valider un par un) sinon il y a la commande :
    cacls d:\test /G administrateur:F<c:\o.txt (le fichier texte contient un "o" et valide automatiquement)


    L'erreur est la suivante :

    Script : (chemin du script)
    ligne : 5
    Caract : 1
    erreur : Objet requis :'server'
    code : 800A01A8
    source erreur d'exection microsoft VBScript
    Avez vous une idée ?

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Points : 29
    Points
    29
    Par défaut
    Mets la balise de code pour ton code que ce soit plus lisible.

    Ensuite effectivement, à ta ligne 5, tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wShell = server.createObject("wscript.shell")
    Il faut en fait que tu mettes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wShell = CreateObject("wscript.shell")
    PS : n'oublie pas de mettre le tag si c'est bon

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Merci mille fois, apparemment l'erreur a passé.
    j'en ai par contre une autre a la ligne 15 ??

    Encore merci de m'aider.. je suis dans une galère......

    le message d'erreur dit :

    script : C:\script.vbs
    ligne : 15
    caract : 1
    Erreur : 0x80041002
    code : 80041002
    source: (null)
    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
     
    strComputer = "."
    Racine = "C:\general\"
     
    Set objWMIService = GetObject("winmgmts:" _
     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set wShell = CreateObject("wscript.shell")
     
    Set colSubfolders = objWMIService.ExecQuery _
     ("Associators of {Win32_Directory.Name='"& racine &"'} " _
     & "Where AssocClass = Win32_Subdirectory " _
     & "ResultRole = PartComponent")
     
     
     ' on parcourt les sous-répertoire du répertoire racine
    For Each objFolder in colSubfolders
     'on extrait le nom du répertoire
     nomrep = Replace(objFolder.Name, racine & "\", "")
     
     'on construit la ligne de commande
     lignedecommande = "C:\Cacls.exe "& objFolder.Name &"/T /G " & nomrep & ":F"
     
     'et on l'exécute
     wShell.run lignedecommande 
    Next
    Promis je n'oublierai pas de mettre résolu une fois ce pb terminé.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Bonjour et encore mille merci pour le coup de main !!

    Tout d abord je tient a signaler que je ne met jamais les mains dans les scripts vbs (c'est une première)
    J'ai du passer par Moscou pour me rendre a Marseille, mais j'ai enfin résolu mon problème.

    Voila le résultat de mon dur labeur (lol) et ce que j'ai changé :


    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
     
     
    strComputer = "."
     
    'Je ne sais pas si c'est obligatoire de déclarer les variables, mais bon...
    dim Racine
    dim nomrep
    dim cptstring
     
    'J'affecte mon dossier général
    Racine = "C:\general"
     
    Set objWMIService = GetObject("winmgmts:" _
     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set wShell = CreateObject("wscript.shell")
     
    Set colSubfolders = objWMIService.ExecQuery _
     ("Associators of {Win32_Directory.Name='"& racine &"'} " _
     & "Where AssocClass = Win32_Subdirectory " _
     & "ResultRole = PartComponent")
     
    'je compte les caractères de Racine et je rajoute 2 pour que ça marche mais je ne sais toujours pas pourquoi.
    cptstring = Len(Racine) + 2
     
     
    'début de la boucle pour chaque dossier
    For Each objFolder in colSubfolders
     
    'Je prend le reste de la chaine a partir de cptstring et j'affecte le résultat dans la variable nomrep
    nomrep = mid(objFolder.Name,cptstring)
     
    'contruction de la ligne de commande
    lignedecommande = "C:\Cacls.exe "& objFolder.Name &" /T /G " & nomrep & ":F"
     
    'execution de la ligne de commande
    wShell.run lignedecommande 
     
    Next

  5. #5
    Candidat au Club
    Inscrit en
    Septembre 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    'il faut ajouter "echo y|" pour eviter de répondre par oui ou par non
    lignedecommande = "C:\WINDOWS\system32\Cacls.exe echo y|"& objFolder.Name &" /T /G " & nomrep & ":F"


    Citation Envoyé par minidoux24 Voir le message
    Bonjour et encore mille merci pour le coup de main !!

    Tout d abord je tient a signaler que je ne met jamais les mains dans les scripts vbs (c'est une première)
    J'ai du passer par Moscou pour me rendre a Marseille, mais j'ai enfin résolu mon problème.

    Voila le résultat de mon dur labeur (lol) et ce que j'ai changé :


    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
     
     
    strComputer = "."
     
    'Je ne sais pas si c'est obligatoire de déclarer les variables, mais bon...
    dim Racine
    dim nomrep
    dim cptstring
     
    'J'affecte mon dossier général
    Racine = "C:\general"
     
    Set objWMIService = GetObject("winmgmts:" _
     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set wShell = CreateObject("wscript.shell")
     
    Set colSubfolders = objWMIService.ExecQuery _
     ("Associators of {Win32_Directory.Name='"& racine &"'} " _
     & "Where AssocClass = Win32_Subdirectory " _
     & "ResultRole = PartComponent")
     
    'je compte les caractères de Racine et je rajoute 2 pour que ça marche mais je ne sais toujours pas pourquoi.
    cptstring = Len(Racine) + 2
     
     
    'début de la boucle pour chaque dossier
    For Each objFolder in colSubfolders
     
    'Je prend le reste de la chaine a partir de cptstring et j'affecte le résultat dans la variable nomrep
    nomrep = mid(objFolder.Name,cptstring)
     
    'contruction de la ligne de commande
    lignedecommande = "C:\Cacls.exe "& objFolder.Name &" /T /G " & nomrep & ":F"
     
    'execution de la ligne de commande
    wShell.run lignedecommande 
     
    Next

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

Discussions similaires

  1. [MVVM] Détecter l'ajout d'un élément sur une liste
    Par Digilougm dans le forum Silverlight
    Réponses: 10
    Dernier message: 16/06/2011, 12h10
  2. [SP-2007] Ajout des lien dynamique dans une liste déroulante
    Par nouvintou dans le forum SharePoint
    Réponses: 2
    Dernier message: 15/03/2011, 12h31
  3. Réponses: 3
    Dernier message: 27/03/2009, 11h27
  4. Réponses: 1
    Dernier message: 25/02/2009, 12h34
  5. Ajouter un élément "TOUT" sur une liste.
    Par loytstf dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/10/2008, 10h55

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