Ошибка при попытке скопировать унаследованные разрешения - PullRequest
1 голос
/ 06 марта 2020

I wi sh, чтобы отключить наследование ACL для группы подпапок, сохраняя при этом существующие разрешения.

С этой целью я запускаю этот фрагмент:

gci | % {
  $Acl = Get-Acl $_
  $Acl.SetAccessRuleProtection($true, $true)
  Set-Acl $_ $Acl
}

Для В каждой подпапке возникает ошибка:

Set-Acl: невозможно установить ACL, поскольку метод, который необходимо вызвать, SetSecurityDescriptor, не существует.

Я нашел этот похожий вопрос , но он не совсем точный дубликат. ОП намерен очистить все разрешения; Я хотел бы сохранить их.

Также: OP заявляет: «Я избавился от сообщения об ошибке», но не раскрывает, как ему это удалось

Как использовать PowerShell для сообщник sh это?

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Есть ряд проблем с Set-Acl. Обычно я стараюсь полагаться. NET для работы ACL:

try {
    $FileSystemObject = (Get-Item '.\accessibilitycpl.dll')
    $Acl = $FileSystemObject.GetAccessControl()
    $Acl.SetAccessRuleProtection($true,$false)
    $FileSystemObject.SetAccessControl($Acl)
} catch {
    ## Catch exceptions!
}
0 голосов
/ 06 марта 2020

Это должно работать для вас:

Get-ChildItem | ForEach-Object {
    $Acl = Get-Acl $_
    $Acl.SetAccessRuleProtection($true,$false) #Set folder inheritance to off
    Set-Acl $_ -AclObject $Acl    
}
...