从ACL /文件夹结构中删除所有用户对象权限

时间:2019-02-03 17:48:15

标签: powershell powershell-v3.0 powershell-v4.0

我想从目录/文件夹安全性中删除所有AD用户对象。

所以,这可能是一个愚蠢的帖子,如果是的话,我表示歉意...但是基本上我想通过目录递归并从权限中删除所有用户对象。文件夹权限应使用组来保护,但偶尔会有用户拒绝将用户直接添加到违反规则的文件夹中。我有一个简单的小脚本,该脚本非常适合特定用户,但是我无法将其设置为使用变量,例如所有域用户帐户。例如,如果我将$ user变量指定为AD搜索,则它不起作用,例如$ USER ='Get-ADuser -filter * -Server'DOMAIN -properties SamAccountName |选择SamAccountName

我很确定这不像这样设置变量字段。任何帮助或建议,不胜感激。谢谢。

$filepath = 'C:\Temp\ACLTesting'
$user     = 'DOMAIN\USER'
Get-ChildItem $filePath -Recurse -Directory | ForEach-Object {
$acl = Get-Acl -Path $_.FullName

$acl.Access | Where-Object {
    $_.IdentityReference.Value -eq $user
} | ForEach-Object {
    $acl.RemoveAccessRule($_) | Out-Null
}

Set-Acl -Path $_.FullName -AclObject $acl
}

不幸的是,仍然不能使用用户变量来使它工作……我是否缺少某些东西,或者这不是可能的功能吗?谢谢。...


暂时将其放到一边,因为它仍然无法正常工作,其他事情也出现了。将会在某个时候重新讨论这一点。任何建议总是值得欢迎的。谢谢。

1 个答案:

答案 0 :(得分:0)

稍微修改您发布的内容,尝试一下……

$filepath = 'C:\Temp\ACLTesting'
$DomainUsers = (Get-ADUser -Filter *).SamAccountName

ForEach ($DomainUser in $DomainUsers)
{
    Get-ChildItem $filePath -Recurse -Directory | 
    ForEach-Object {
        $acl = Get-Acl -Path $_.FullName

        $acl.Access | 
        Where-Object {
            $_.IdentityReference.Value -eq $DomainUser
        } | 
        ForEach-Object {
            $acl.RemoveAccessRule($_) | Out-Null
        }

        Set-Acl -Path $_.FullName -AclObject $acl
    }
}