Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/02/2012, 15h53   #1
Invité de passage
 
Vinc Teteve
Inscription : juillet 2010
Messages : 28
Détails du profil
Informations personnelles :
Nom : Vinc Teteve

Informations forums :
Inscription : juillet 2010
Messages : 28
Points : 4
Points : 4
Par défaut [VBA] Héritage NTFS avec ADsSecurity

Bonjour,

Je fais un script qui doit ré-appliquer les autorisations NTFS sur des dossiers d'utilisateurs dans un domaine AD. Ces dossiers sont ensuite montés par le LogonScript.
J'ai donc un répertoire "\\serv\test\" contenant 6 répertoires :
\\serv\test\U001\ à \\serv\test\U006\". Chaque utilisateur a donc un lecteur qui lui est propre. Dans certains de ces répertoires, les utilisateurs ont déjà créé des fichiers et des sous-répertoires.
Je veux donc propager les droits que je re-plaque sur chaque "arborescence".
Mon script actuel :

Code :
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
Sub forceauth(ByVal strreppath)
 
Dim objADsSec, objSecDesc, objDACL, ace, objSousRep
Dim objACESys, objACEuser, struser
 
'AccessMask
Const FULL_CONTROL = &H1F01FF  '14 permissions
'ACE flags
Const OBJECT_INHERIT_ACE = &H1 'propage aux objets enfants
Const CONTAINER_INHERIT_ACE = &H2 'propage aux dossiers enfants
'ACE types
Const ACCESS_ALLOWED_ACE_TYPE = &H0 'type : "Autoriser"
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objRep = objFSO.GetFolder(strreppath)
Set objADsSec = CreateObject("ADsSecurity")
 
' Pour chaque sous-répertoire
For Each objSousRep In objRep.SubFolders
    struser = objSousRep.Name
    Set objSecDesc = objADsSec.GetSecurityDescriptor("FILE://" & objSousRep.Path)
    Set objDACL = objSecDesc.DiscretionaryAcl
' On supprime les anciennes ACE
    For Each ace In objDACL
        objDACL.RemoveAce ace
    Next
    objSecDesc.DiscretionaryAcl = objDACL
    objADsSec.SetSecurityDescriptor (objSecDesc)
'On crée les ACE pour l'utilisateur "SYSTEM" et l"utilisateur du domaine
    Set objACESys = CreateObject("AccessControlEntry")
    objACESys.Trustee = "SYSTEM"
    objACESys.AccessMask = FULL_CONTROL
' La ligne suivante "devrait" faire hériter les objets enfants....
    objACESys.AceFlags = OBJECT_INHERIT_ACE + CONTAINER_INHERIT_ACE
    objACESys.AceType = ACCESS_ALLOWED_ACE_TYPE
    Set objACEuser = CreateObject("AccessControlEntry")
    objACEuser.Trustee = "DOMAINE\" & struser
    objACEuser.AccessMask = FULL_CONTROL
    objACEuser.AceFlags = OBJECT_INHERIT_ACE + CONTAINER_INHERIT_ACE
    objACEuser.AceType = ACCESS_ALLOWED_ACE_TYPE
 
    objDACL.AddAce (objACESys)
    objDACL.AddAce (objACEuser)
    objSecDesc.DiscretionaryAcl = objDACL
' On applique les ACE
    objADsSec.SetSecurityDescriptor (objSecDesc)
Next
 
Set objADsSec = Nothing
Set objSecDesc = Nothing
Set objDACL = Nothing
Set objACESys = Nothing
Set objACEuser = Nothing
 
End Sub
Une fois le script exécuté, les dossiers U001 à U006 ont bien les autorisations "Contrôle Total" pour les utilisateurs "SYSTEM" et pour lui-même(DOMAINE\U00x).
Mais les sous-dossiers de \\serv\test\U002 ont toujours des autorisations exotiques...
Comment forcer cet héritage, si possible sans faire de boucle récursive pour descendre dans toutes les arbo... ?
Merci d'avance de vos pistes et idées...
teteve45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h10.


 
 
 
 
Partenaires

Hébergement Web