![Скрипт для удаления множества старых профилей пользователей с файлового сервера?](https://rvso.com/image/717740/%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%20%D0%B4%D0%BB%D1%8F%20%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B0%20%D1%81%D1%82%D0%B0%D1%80%D1%8B%D1%85%20%D0%BF%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D0%B5%D0%B9%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9%20%D1%81%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%3F.png)
У меня есть сетевой ресурс на компьютере с 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, если нет: становится владельцем, устанавливает полные права, затем удаляет. Работает хорошо.