web-dev-qa-db-fra.com

Définir récursivement les autorisations sur les dossiers à l'aide de Powershell?

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:

  1. Supprimer tous les ACL du dossier
  2. Ajouter ACL au dossier
  3. Définir ACL

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

4
xaisoft

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.

2
Ansgar Wiechers