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