J'ai un répertoire que je veux parcourir récursivement et définir des autorisations sur tous les dossiers. L'ordre des opérations doit donc être:
J'ai essayé le code ci-dessous, mais je reçois l'erreur
Impossible de définir la liste de contrôle d'accès car la méthode à appeler, SetSecurityDescriptor, n'existe pas.
foreach ($folder in Get-ChildItem -Path c:\perms -Recurse -Directory) {
$AccessRule = New-Object System.Security.Accesscontrol.FileSystemAccessRule ("user", "FullControl", "ContainerInherit,ObjectInherit", "InheritOnly", "Allow")
$acl = Get-Acl $folder
$acl.SetAcccessRule($AccessRule)
Set-Acl -Path $folder.FullName -AclObject $acl
}
Je me suis débarrassé du message d'erreur et il a ajouté l'ACL, mais je veux essentiellement supprimer toutes les ACL du dossier et en ajouter de nouvelles.
J'ai mis à jour mon script pour ressembler à ceci:
$acl = Get-Acl -Path "c:\perms"
$acl.SetAccessRuleProtection($true,$false)
$acl.Access | ForEach-Object { $acl.RemoveAccessRule($_) | Out-Null }
$ace = New-Object System.Security.Accesscontrol.FileSystemAccessRule ("user", "FullControl", "ContainerInherit,ObjectInherit", "InheritOnly", "Allow")
$acl.AddAccessRule($ace)
Set-Acl -Path "c:\perms" -AclObject $acl
Si je veux ajouter plusieurs $ace
, S'agit-il simplement de déclarer $ace2
, $ace3
Puis d'appeler $acl.AddAccessRule($ace2)
, $acl.AddAccessRule($ace3)
.
Utilisez SetAccessRuleProtection()
pour désactiver l'héritage et supprimer les ACE hérités:
$acl.SetAccessRuleProtection($true, $false)
Utilisez RemoveAccessRule()
pour supprimer les ACE existants (non hérités):
$acl.Access | ForEach-Object { $acl.RemoveAccessRule($_) | Out-Null }
Utilisez AddAccessRule()
pour ajouter de nouveaux ACE:
$ace = New-Object Security.AccessControl.FileSystemAccessRule "user", ...
$acl.AddAccessRule($ace)
...
Faites cela uniquement pour le dossier le plus haut. Laissez l'héritage activé partout ci-dessous, afin que vos modifications soient propagées automatiquement.