【问题标题】:Error when attempting to copy inherited permissions尝试复制继承的权限时出错
【发布时间】:2020-03-06 16:24:04
【问题描述】:

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

为此,我正在运行这个sn-p:

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

对于每个子文件夹,都会发生错误:

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

我找到了this similar question,但它并不完全是完全相同的副本。 OP打算清除所有权限;我想保留它们。

另外:OP 声明“我摆脱了错误消息”,但没有透露他是如何做到的

我如何使用 PowerShell 来完成这项工作?

【问题讨论】:

    标签: powershell acl


    【解决方案1】:

    Set-Acl 存在许多问题。我通常会尝试依赖 .NET 进行 ACL 工作:

    try {
        $FileSystemObject = (Get-Item '.\accessibilitycpl.dll')
        $Acl = $FileSystemObject.GetAccessControl()
        $Acl.SetAccessRuleProtection($true,$false)
        $FileSystemObject.SetAccessControl($Acl)
    } catch {
        ## Catch exceptions!
    }
    

    【讨论】:

    • 成功了,谢谢。仅供参考,我将第二个参数更改为 $true 以复制现有权限。
    • 是的,我想我复制了 Shamus 的代码而不是你的代码作为修改的骨架——抱歉。
    【解决方案2】:

    这应该适合你:

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

    【讨论】:

    • 我看到您正确命名了 -AclObject 参数。接得好。但是,会发生同样的错误。请注意,我希望复制继承的权限,因此方法调用将改为 $Acl.SetAccessRuleProtection($true,$true)
    猜你喜欢
    • 2018-04-02
    • 1970-01-01
    • 2019-01-30
    • 2021-01-26
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    相关资源
    最近更新 更多