У нас есть структура папок со многими явными правами, такими как
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)
и так далее
Я хочу добавить разрешение (Системная учетная запись) для всех явных ACL, но не для тех, которые не являются явными. И, конечно, есть некоторые папки, которые недоступны даже учетной записи администратора, поэтому мне нужно игнорировать ошибки.
Кто-нибудь знает сценарий, который может достичь этого?
Edit1
Благодаря Hardoman, вот рабочее решение для текущей папки, подпапки и файлов и без обнаружения ошибки ...
$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)'
}
}
Не нашел решения с помощью set-acl, возможно, у кого-то есть идея, это мое текущее состояние set-acl, но подпапка не получает разрешения, даже когда они наследуются.
$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)"
}
}
}