从文件服务器中删除许多旧用户配置文件的脚本?

从文件服务器中删除许多旧用户配置文件的脚本?

我在 Windows Server 2012 计算机上有一个网络共享,用于存储所有用户配置文件(我的文档、桌面等)。

我需要摆脱数百名老用户,我正在逐一检查他们...首先让管理员成为一个用户的所有文件的所有者...然后将该用户的所有文件的完全控制权交给管理员...然后删除该用户的文件...然后转到下一个用户。

这将需要几天的时间。

同一目录中还有许多有效/当前用户文件,我不想成为它们的所有者或者删除它们。

有没有更省时的方法来删除此网络共享中的特定文件夹?

我可以将某种脚本输入所有老用户并让它运行几个小时吗?

答案1

当然,有了 PowerShell 一切皆有可能!:-) 这是一个完成此操作的总体过程。

您可以先使用命令从 CSV 文件中读取要删除的顶级文件夹/用户Import-CSV $Filename | ForEach-Object

对于每个顶级文件夹,在 ForEach 块中,您可以使用 读取所有子文件夹和文件Get-ChildItem -Recurse

然后,您可以获得第二个 CSV 文件,其中包含不应删除的文件或文件夹,并且对于循环遍历的每个文件,您都可以读取并与此文件进行比较,确定是否应保存或删除(取得所有权后)。

答案2

我不得不再次这样做,所以今天重新审视了这个问题,按照@PatrikN 的建议,这是我使用的 powershell 脚本:

Get-ChildItem C:\UserDocs |
    ForEach-Object {
        if (!(Get-ADUser -Filter "sAMAccountName -eq '$($_.Name)'")) {
            "$($_.Name) does not exist and is being deleted."
            takeown /a /r /d Y /f $_.FullName
            $Acl = Get-Acl $_.FullName
            $Acl.AddAccessRule(
                (New-Object System.Security.AccessControl.FileSystemAccessRule(
                    [System.Security.Principal.WindowsIdentity]::GetCurrent().Name,
                    "FullControl",
                    "ContainerInherit, ObjectInherit",
                    "None",
                    "Allow"
                ))
            )
            (Get-Item $_.FullName).SetAccessControl($Acl)
            Remove-Item -LiteralPath $_.FullName -Force -Recurse
        }
    }

我最终没有使用 CSV 文件。

该脚本循环遍历所有用户配置文件目录,查询名称是否在活动目录中,如果不在,则获取所有权,设置完全权限,然后删除。效果很好。

相关内容