Powershell 尝试复制继承的权限时出错

Powershell 尝试复制继承的权限时出错,powershell,acl,Powershell,Acl,我希望在保留现有权限的同时,在一组子文件夹上禁用ACL继承 为此,我将运行以下代码段: gci | % { $Acl = Get-Acl $_ $Acl.SetAccessRuleProtection($true, $true) Set-Acl $_ $Acl } 对于每个子文件夹,都会发生错误: Set-Acl:无法设置Acl,因为它需要调用的方法SetSecurityDescriptor不存在 我找到了,但不是完全一样。OP打算清除所有权限;我想保留它们 此外:OP声明“我已经

我希望在保留现有权限的同时,在一组子文件夹上禁用ACL继承

为此,我将运行以下代码段:

gci | % {
  $Acl = Get-Acl $_
  $Acl.SetAccessRuleProtection($true, $true)
  Set-Acl $_ $Acl
}
对于每个子文件夹,都会发生错误:

Set-Acl:无法设置Acl,因为它需要调用的方法SetSecurityDescriptor不存在

我找到了,但不是完全一样。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!
}

我发现您正确地命名了
-AclObject
参数。抢手货但是,同样的错误也会发生。请注意,我希望复制继承的权限,因此方法调用将改为
$Acl.SetAccessRuleProtection($true,$true)
。谢谢。仅供参考,我将第二个参数更改为
$true
,以复制现有权限。是的,我想我复制了Shamus的代码,而不是您的代码,作为要修改的骨架--对此表示抱歉。