Сценарий для удаления многих старых профилей пользователей с файлового сервера?

У меня есть общий сетевой ресурс на компьютере с Windows Server 2012, который используется для хранения всех файлов профиля пользователя (Мои документы, Рабочий стол и т. Д.) .

Мне нужно избавиться от сотен старых пользователей, и я просматриваю их всех одного за другим ... сначала делаю администратора владельцем всех файлов для одного пользователя ... затем передаю полный контроль все файлы этого пользователя администратору ... затем удаление файлов этого пользователя ... затем переход к следующему пользователю.

Это займет несколько дней.

Есть много действительных / текущих пользовательских файлов, которые я также не хочу становиться владельцем или удалять в этом же каталоге.

Есть ли способ удаления определенных папок в этом сетевом ресурсе с меньшими затратами времени?

Какой-то сценарий, который я могу ввести для всех старых пользователей и позволить ему сделать свое дело в течение нескольких часов?

0
задан 31 May 2019 в 20:18
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.

Сценарий просматривает все каталоги профилей пользователей, запрашивает, находится ли имя в активном каталоге, в противном случае: принять владение, установить полные права доступа, затем удалить. Это сработало.

0
ответ дан 4 December 2019 в 16:01

Конечно, с PowerShell возможно все! :-) Это общий процесс того, как это можно сделать.

Вы можете начать с чтения основных папок / пользователей, которых вы хотите удалить, из файла CSV с помощью команд Import-CSV $ Filename | ForEach-Object .

Для каждой верхней папки в блоке ForEach вы можете затем прочитать все подпапки и файлы с помощью Get-ChildItem -Recurse .

Затем вы можете иметь второй CSV-файл с файлами или папками, которые не следует удалять, и для каждого файла, который вы просматриваете в цикле, вы можете прочитать и сравнить с этим файлом, если он будет сохранен или удален (после вступления во владение).

1
ответ дан 4 December 2019 в 16:01

Теги

Похожие вопросы