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

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

У меня есть сетевой ресурс на компьютере с 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-файлы.

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

Связанный контент