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)"
}
}
}
icacls
outil et ajoutez vos autorisations préférées. Plus de détails ici: ss64.com/nt/icacls.html