我希望在保留现有权限的同时禁用一组子文件夹的ACL继承。
为此,我正在运行此代码段:
gci | % {
$Acl = Get-Acl $_
$Acl.SetAccessRuleProtection($true, $true)
Set-Acl $_ $Acl
}
对于每个子文件夹,发生错误:
Set-Acl:无法设置ACL,因为它需要调用的方法SetSecurityDescriptor不存在。
我找到了this similar question,但不是完全相同的副本。 OP打算清除所有权限;我想保留它们。
还:OP指出“我摆脱了错误消息,但没有透露他是如何做到的]
如何使用PowerShell完成此操作?
这应该为您工作:
Get-ChildItem | ForEach-Object {
$Acl = Get-Acl $_
$Acl.SetAccessRuleProtection($true,$false) #Set folder inheritance to off
Set-Acl $_ -AclObject $Acl
}
Set-Acl存在许多问题。我通常尝试依靠.NET进行ACL工作:
try {
$FileSystemObject = (Get-Item '.\accessibilitycpl.dll')
$Acl = $FileSystemObject.GetAccessControl()
$Acl.SetAccessRuleProtection($true,$false)
$FileSystemObject.SetAccessControl($Acl)
} catch {
## Catch exceptions!
}