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 : 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
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...