Nous avons une structure de dossiers avec de nombreux droits explicites comme
root Folder
- subfolder 1 (explicit acl, no inherit acl)
- subfolder 2 (explicit acl, no inherit acl)
--subsubfolder 1 (no explicit rights, inherit acl)
--subsubfolder 2 (explicit acl, no inherit acl)
etc
Je souhaite ajouter une autorisation (compte système) à toutes les listes de contrôle d'accès explicites, mais pas à celles qui ne le sont pas. Et bien sûr, il y a des dossiers qui ne sont pas accessibles même par un compte d'administrateur, je dois donc ignorer les erreurs.
Toute personne au courant d'un script qui peut atteindre cet objectif?
Edit1
Grâce à Hardoman, voici une solution de travail pour le dossier, le sous-dossier et les fichiers actuels, sans que l'erreur ne soit détectée ...
$folders = (Get-ChildItem C:\Temp -Directory -Recurse) | select -ExpandProperty fullname
foreach ($item in $folders) {
$inheritance = (Get-Acl $item).access[0] | select -ExpandProperty isinherited
if ($inheritance -eq $false) {
icacls.exe $item /grant 'System:(OI)(CI)(RX)'
}
}
N'a pas trouvé de solution avec set-acl, peut-être que quelqu'un a une idée, il s'agit de l'état actuel de set-acl, mais le sous-dossier ne reçoit pas les permissions même lorsqu'il est hérité.
$folders = (Get-ChildItem C:\Temp -Directory -Recurse) | select -ExpandProperty fullname
foreach ($item in $folders) {
$inheritance = (Get-Acl $item).access[0] | select -ExpandProperty isinherited
if ($inheritance -eq $false) {
try {
$acl = Get-Acl $item
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("System","FullControl, Synchronize", "ContainerInherit,ObjectInherit", "None", "Allow")
$acl.SetAccessRule($AccessRule)
Set-Acl $item $acl
}
catch {
"Failed to access folder $item"
"Exception type is $($_.Exception.GetType().Name)"
}
}
}
la source
icacls
outil et ajoutez vos autorisations préférées. Plus de détails ici: ss64.com/nt/icacls.htmlRéponses:
Vous devez écrire un script Powershell pour cela. Vous devez obtenir récursivement tous les dossiers et sous-dossiers, vérifier l’héritage pour chacun et utiliser Get-ACL et Set-ACL les commadlets ajoutent des autorisations pour le système Compte. Try / catch gérera les erreurs si le script ne peut pas accéder au dossier.
Voici l'exemple que j'ai écrit pour vous, en supposant que vous récupériez dans le dossier C: \ temp à titre d'exemple.
P.S. Pour que Get-ChildItem avec -Directory fonctionne, vous devez avoir Powershell 4+. Ce commutateur manque dans PS 2.0
la source