【问题标题】:powershell remove all permissions on a folder for a specific userpowershell 删除特定用户对文件夹的所有权限
【发布时间】:2012-11-10 22:05:09
【问题描述】:

我需要一个脚本或简单的 powershell 代码来删除特定用户对文件夹的所有权限,方法是将这些删除也继承到所有子文件夹和文件 - 递归... 提前谢谢!

【问题讨论】:

    标签: powershell permissions directory


    【解决方案1】:
     $acl=get-acl c:\temp
     $accessrule = New-Object system.security.AccessControl.FileSystemAccessRule("domain\user","Read",,,"Allow")
     $acl.RemoveAccessRuleAll($accessrule)
     Set-Acl -Path "c:\temp" -AclObject $acl
    

    这应该会以递归方式擦除 c:\temp 中用户的所有安全规则

    【讨论】:

    • 嗨 Kayasax,再次感谢您的支持。它有助于最后的代码,但不能递归删除?!能否请您再审核一次..提前谢谢!
    • 真的吗?这已经在我的工作站上成功了......你可以试试ls c:\temp -recurse |set-acl -aclObject $acl
    • 你的意思是这样尝试: $acl=get-acl c:\temp $accessrule = New-Object system.security.AccessControl.FileSystemAccessRule("domain\user","Read",,, "允许") $acl.RemoveAccessRuleAll($accessrule) ls C:\temp -recurse |设置-acl -aclObject $acl
    • 似乎最后一个代码运行良好......通常需要更长的时间,但看起来很好......并且除了为一个用户提供完全控制和特殊权限之外的角色,我们可以使用相同的逻辑...$acl=get-acl c:\temp $accessrule = New-Object system.security.AccessControl.FileSystemAccessRule("domain\user","Read",,,"Allow‌​") $acl. RemoveAccessRuleAll($accessrule) ls C:\temp -recurse | set-acl -aclObject $acl ,我们应该使用 AddAccessRule 而不是 removeaccessrule all...所以它应该看起来像?
    • @AdityaBokade 尝试在设置 acl 之前取得所有权(使用 takeown.exe
    【解决方案2】:

    我认为更简单的方法是从具有正确权限的文件或文件夹中复制 acl,并将其应用于您想要特定访问权限的文件夹。 示例:

    $acl= get-acl /path/to/file_with_correct acl 
    $files = get-childItem c:\temp\*.* -recurce | set-acl -aclobject $acl -whatif
    

    去掉-whatif参数有效修改acl

    或关注this technet article 并使用如下代码:

    $Right = [System.Security.AccessControl.FileSystemRights]::Read
    $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::None 
    $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::InheritOnly  
    $objType = [System.Security.AccessControl.AccessControlType]::Allow 
    
    $objUser = New-Object System.Security.Principal.NTAccount("domain\bob") 
    $objACE = New-Object System.Security.AccessControl.FileSystemAccessRule `
        ($objUser, $Right, $InheritanceFlag, $PropagationFlag, $objType) 
    $objACL = Get-ACL "d:\test" 
    $objACL.RemoveAccessRuleAll($objACE) 
    Set-ACL "d:\test" -AclObject $objACL
    

    【讨论】:

    • 感谢 Kayasax 的回复,但请您举个例子,如果从 D:\Test 路径位置说,我需要为名为 bob 的用户删除此文件夹的所有权限。 ..
    • 示例:$acl= get-acl D:\Test $files= get-childItem $acl -recurce | set-acl -aclobject $acl -whatif .....我在哪里为用户指定对象?!我必须在哪里写用户 bob 以及我在哪里定义我删除权限...
    • 嗨 Kayasax,我在执行此 ps1 时收到以下错误:
    • New-Object :找不到“FileSystemAccessRule”的重载和参数计数:“5”。在 line:7 char:21 + $objACE = New-Object
    • 使用“1”参数调用“RemoveAccessRuleAll”的异常:“值不能为空。参数名称:规则”在行:10 char:28 + $objACL.RemoveAccessRuleAll
    猜你喜欢
    • 2020-06-16
    • 2017-02-04
    • 2019-09-07
    • 2014-07-25
    • 2022-12-06
    • 1970-01-01
    • 2014-06-15
    • 2012-12-15
    • 1970-01-01
    相关资源
    最近更新 更多