如何从大量文件夹中删除单个用户ACL?

时间:2015-09-09 20:12:35

标签: powershell powershell-v2.0 acl powershell-v3.0

我有一个非常大的文件夹列表,我需要从每个文件夹中删除一个ACL。我没有手动操作,而是尝试编写一个脚本来在很短的时间内完成它,但我遇到了一些麻烦。

这是我到目前为止所做的:

$filepath = "C:\ALCTEST"
$user = "domain\username"

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

##Need to do this in order to remove item 0 from the array, otherwise
##item 0 is the parent folder
$newfolders = $folders[1,2 + 3..($folders.length - 1)]

foreach ($folder in $newfolders) {
    $acl = Get-Acl -Path $folder.FullName

    foreach ($access in $acl.access) {
        foreach ($value in $access.IdentityReference.Value) {
            if ($value -eq $user) {
                $acl.RemoveAccessRule($access) | Out-Null
            }
        }
    }

    Set-Acl -Path $folder -AclObject $acl
}

从我在调试期间看到的内容中,我认为一切正常,直到我尝试将ACL设置回文件夹。当它到达那一行时,我收到错误

  

无法找到路径' C:\ Windows \ system32 \ 01'因为它不存在。

在ACLTEST的父文件夹中有七个名为" 01" ..." 07"使用各种ACL进行测试。

我不知道从哪里开始。我正在阅读this Scripting Guy article,这帮助了我很多,但他的脚本似乎专注于手动输入文件夹路径,我绝对无法对需要更改的数百个文件夹进行操作。

感谢任何帮助。我是PowerShell脚本的新手,所以如果你看到我在上面的脚本中提到的任何错误,我很乐意听到它们。

0 个答案:

没有答案