如何使用PowerShell从文件夹和所有子文件夹中删除所有访问规则?

时间:2014-12-15 11:05:57

标签: powershell access-control subdirectory removeall

我知道这个问题已针对特定文件夹进行了解答,但我也希望从所有子文件夹中删除用户。

我尝试设置继承和传播值以确保设置是继承的,但无论我如何设置参数,它仍然只适用于根目录。 (部分)我的代码看起来像这样:

$inherit = "ContainerInherit, ObjectInherit"
$propagation = "None"
$Acl=get-acl $o2
$Accessrule = New-Object system.security.AccessControl.FileSystemAccessRule($o1,"Read", $inherit, $propagation,"Allow")
$Acl.RemoveAccessRuleAll($Accessrule)
Set-Acl -Path $o2 -AclObject $Acl

1 个答案:

答案 0 :(得分:1)

请注意以下内容,它会删除ACL

使用前测试

我强烈建议在使用以下内容之前在单独的驱动器上制作带有完整ACL的ROBOCOPY。如果出现问题,您可以随时复制文件或ACL或两者。

好的,你可以从这里开始。就像Ansgar所说,你几乎遍历,文件夹列表,并为每个文件夹检索每个ACL中的所有访问控制条目(ACE)。

如果未继承ACE,则将其删除。

已更新以使用$ o1 在此版本中,需要将ACE分配给$o1定义的用户。

我还没有测试过,所以在释放地狱之前,先进行一些测试并逐步检查数值。

$filepath = "<your drive letter>:"

$folders = @((get-item $filePath))
$folders += Get-ChildItem $filePath -Recurse | where { $_.PSIsContainer -ne $false }

Foreach ($folder in $folders)
{

    $acl = Get-Acl -Path $folder.FullName

    Foreach($access in $acl.access) 
    { 
        if ($access.isinherited -eq $false -and $access.IdentityReference.Value -eq $o1)
        { 
            $acl.RemoveAccessRule($access) 
        }  
    } 
    Set-Acl -path $folder.fullname -aclObject $acl 
}