Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

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

Мне пришлось сделать это снова, поэтому я еще раз вернулся к этому сегодня, следуя предложениям @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.

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