Понедельник, 9:15 утра. Сотрудник звонит в техподдержку: «Не могу войти в систему». Вы проверяете консоль — учётной записи нет. Кто-то удалил пользователя из Active Directory. Возможно, ошибочно убрали целую OU с двадцатью аккаунтами. В классическом сценарии без AD Recycle Bin вас ждут часы работы: восстановление из резервной копии, ручная перепривязка групп, сброс настроек профиля. Но если корзина Active Directory была включена заранее, та же задача займёт буквально тридцать секунд — и пользователь вернётся со всеми членствами в группах, атрибутами и правами доступа нетронутыми.
В этой статье разберём всё: как работает механизм корзины на уровне базы данных NTDS, почему Microsoft не включила её по умолчанию, как проверить текущий статус, включить и воспользоваться — через PowerShell и через графический интерфейс ADAC. Отдельно остановимся на подводных камнях: конфликтах имён, членстве в группах, SID и на том, что делать, если корзина всё-таки не была включена.
Как работает корзина AD — tombstone vs logical delete
Чтобы понять ценность корзины, нужно сначала разобраться в том, что происходит с объектом при удалении без неё. В стандартной схеме Active Directory удалённый объект превращается в tombstone — «надгробие». Это не полное стирание: объект перемещается в скрытый контейнер CN=Deleted Objects и сохраняется там в течение периода, задаваемого атрибутом tombstoneLifetime. По умолчанию в современных доменах это 180 дней. После истечения срока сборщик мусора Active Directory окончательно удаляет объект из базы данных NTDS.
Проблема tombstone-объектов в том, что при создании надгробия большинство атрибутов намеренно очищается. Сохраняются только идентификационные данные: objectGUID, objectSID, sAMAccountName, distinguishedName и несколько технических атрибутов. Всё остальное — членство в группах, описание, телефоны, атрибуты Exchange, политики — безвозвратно теряется в момент удаления.
Когда корзина AD (AD Recycle Bin) включена, механизм меняется принципиально. Удалённый объект переходит в состояние логически удалённого (logically deleted), а не превращается в tombstone. Критически важно: при этом все атрибуты сохраняются в полном объёме. Объект лежит в том же контейнере CN=Deleted Objects, но его атрибуты нетронуты. Срок хранения в этом состоянии контролируется параметром msDS-deletedObjectLifetime, который по умолчанию равен значению tombstoneLifetime — 180 дней. По истечении объект переходит в состояние recycled и впоследствии удаляется окончательно.
| Параметр | Без корзины (tombstone) | С корзиной (logical delete) |
|---|---|---|
| Атрибуты объекта | Очищены | Полностью сохранены |
| Членство в группах | Потеряно | Сохранено |
| Восстановление | Сложное, ручное | Одна команда PowerShell |
| Срок хранения | tombstoneLifetime (180 д.) | msDS-deletedObjectLifetime (180 д.) |
Почему корзина выключена по умолчанию — и это баг, не фича
AD Recycle Bin появилась в Windows Server 2008 R2 и требует, чтобы функциональный уровень леса был не ниже Windows Server 2008 R2. На момент релиза многие организации ещё эксплуатировали домены с контроллерами на базе Windows Server 2003 или 2008, поэтому включать корзину по умолчанию было нельзя — это бы сломало совместимость.
Вторая причина — необратимость. После включения корзины функциональный уровень леса фиксируется, и откатить изменение назад невозможно. Microsoft предпочла переложить это решение на администраторов, чтобы те осознанно принимали на себя это ограничение. В результате сегодня, в 2026 году, когда Windows Server 2003 давно снят с поддержки, а подавляющее большинство доменов работает на уровне 2016 или выше, корзина по-прежнему остаётся выключенной по умолчанию — просто по причине исторической инерции.
Что касается требований: функциональный уровень леса должен быть Windows Server 2008 R2 или выше. Все контроллеры домена должны работать под управлением Windows Server 2008 R2 или новее. Операцию включения должен выполнять член группы Schema Admins или Enterprise Admins.
Проверяем статус корзины
Прежде чем что-либо делать, убедитесь, что корзина ещё не включена — возможно, предыдущий администратор уже позаботился об этом. Откройте PowerShell на контроллере домена с правами Enterprise Admin и выполните:
# Проверяем статус корзины Active Directory
Get-ADOptionalFeature -Filter {Name -like "Recycle Bin Feature"} |
Select-Object Name, FeatureScope, EnabledScopes
Если вывод содержит EnabledScopes с указанием имени леса — корзина уже активна, можно сразу переходить к разделу про восстановление. Если EnabledScopes пуст или команда возвращает пустой результат — корзина выключена.
Альтернативный способ проверки через ADSI Edit: подключитесь к Configuration Naming Context, откройте CN=Optional Features,CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration и найдите объект CN=Recycle Bin Feature. Атрибут msDS-OptionalFeatureFlags со значением 1 означает, что функция включена.
Включаем корзину — необратимое, но необходимое действие
Включение выполняется одной командой PowerShell. Импортируйте модуль ActiveDirectory, если он ещё не загружен, и выполните:
# Импорт модуля (если не загружен автоматически)
Import-Module ActiveDirectory
# Включение корзины Active Directory
Enable-ADOptionalFeature `
-Identity "Recycle Bin Feature" `
-Scope ForestOrConfigurationSet `
-Target (Get-ADForest).Name `
-Confirm:$false
Разберём каждый параметр:
-Identity "Recycle Bin Feature"— имя опциональной функции AD, оно фиксировано.-Scope ForestOrConfigurationSet— корзина включается на уровне леса, не отдельного домена.-Target (Get-ADForest).Name— автоматически подставляет DNS-имя вашего леса.-Confirm:$false— пропускает интерактивный запрос подтверждения.
После выполнения команды изменение реплицируется на все контроллеры домена. В большой инфраструктуре дождитесь завершения репликации, прежде чем проверять результат. Принудительно запустить репликацию можно командой repadmin /syncall /AdeP.
Восстановление через PowerShell — 3 сценария
Сценарий 1: восстановление пользователя по имени учётной записи
Самый частый случай — восстановить конкретного пользователя, которого знаете по sAMAccountName:
# Находим удалённый объект по имени
$deleted = Get-ADObject -Filter {
sAMAccountName -eq "ivanov" -and isDeleted -eq $true
} -IncludeDeletedObjects -Properties *
# Просматриваем что нашли (имя, дата удаления, OU)
$deleted | Select-Object Name, WhenChanged, DistinguishedName
# Восстанавливаем в исходное местоположение
Restore-ADObject -Identity $deleted.ObjectGUID
Если нужно восстановить в другую OU, добавьте параметр -TargetPath:
Restore-ADObject -Identity $deleted.ObjectGUID `
-TargetPath "OU=Users,OU=Moscow,DC=company,DC=local"
Сценарий 2: восстановление всех объектов из удалённой OU
Кто-то удалил целую организационную единицу? Восстанавливаем пошагово: сначала саму OU, затем всё её содержимое:
# Шаг 1: восстанавливаем саму OU
Get-ADObject -Filter {
Name -eq "Finance" -and isDeleted -eq $true
} -IncludeDeletedObjects | Restore-ADObject
# Шаг 2: находим все удалённые объекты из этой OU
Get-ADObject -Filter {isDeleted -eq $true} `
-IncludeDeletedObjects -Properties * |
Where-Object {
$_.DistinguishedName -match "OU=Finance"
} | Restore-ADObject
Сценарий 3: массовое восстановление удалённых за последние 24 часа
$cutoff = (Get-Date).AddHours(-24)
Get-ADObject -Filter {
isDeleted -eq $true -and
WhenChanged -ge $cutoff
} -IncludeDeletedObjects -Properties WhenChanged, ObjectClass |
Where-Object { $_.ObjectClass -in @("user","group","computer") } |
ForEach-Object {
Write-Host "Восстанавливаю: $($_.Name)"
Restore-ADObject -Identity $_.ObjectGUID
}
Восстановление через GUI — Active Directory Administrative Center
Если PowerShell вам не близок или нужно дать задачу сотруднику без опыта работы с консолью, используйте графический инструмент Active Directory Administrative Center (ADAC). Он встроен в Windows Server, начиная с 2008 R2, и предоставляет удобный интерфейс для работы с корзиной.
- Откройте Active Directory Administrative Center через меню «Средства» в Server Manager или введите
dsac.exeв строке выполнения. - В левой панели разверните дерево вашего домена и найдите контейнер Deleted Objects. Если его не видно — убедитесь, что корзина включена.
- В центральной панели отобразится список всех удалённых объектов. Используйте поле фильтра сверху для быстрого поиска по имени или типу объекта.
- Выберите нужный объект (или несколько с зажатым Ctrl), нажмите правую кнопку мыши и выберите Восстановить (Restore) для возврата в исходное место или Восстановить в... (Restore To) для выбора другой OU.
- Подтвердите операцию. Объект немедленно появится в указанном месте со всеми исходными атрибутами.
ADAC особенно удобен при работе с большим количеством объектов: можно отсортировать список по дате удаления, типу объекта или имени, а затем выделить диапазон и восстановить всё одним кликом.
Что делать если корзина не была включена
Это менее приятная ситуация, но не тупик. У вас есть несколько вариантов в зависимости от того, прошёл ли tombstoneLifetime (180 дней) с момента удаления.
Вариант 1: tombstone ещё не истёк — ldp.exe
Утилита ldp.exe позволяет напрямую работать с атрибутами объектов LDAP, включая tombstone-записи. Запустите ldp.exe, подключитесь к контроллеру домена, привяжитесь (Bind) под Enterprise Admin, затем выполните поиск в базе с флагом LDAP_SERVER_SHOW_DELETED_OID. Найдя нужный tombstone-объект, вы можете изменить атрибут isDeleted на FALSE и атрибут distinguishedName на исходный путь — это вернёт объект, но без большинства атрибутов, которые были очищены при создании tombstone.
Вариант 2: авторитативное восстановление из резервной копии — ntdsutil
Если нужны полные атрибуты, единственный надёжный путь — authoritative restore из резервной копии Windows Server Backup:
# Перезагрузить DC в Directory Services Restore Mode (DSRM)
# Затем в командной строке (с правами администратора DSRM):
ntdsutil
activate instance ntds
authoritative restore
restore subtree "CN=ivanov,OU=Users,DC=company,DC=local"
quit
quit
Вариант 3: tombstone истёк — объект удалён безвозвратно
Если прошло больше 180 дней и у вас нет резервной копии — объект утерян на уровне Active Directory. В этом случае придётся создавать учётную запись заново и вручную восстанавливать членство в группах из документации, экспортов или журналов аудита.
Тонкости: конфликты имён, Group Membership, SID
Восстановление объекта через Restore-ADObject работает практически прозрачно, но есть нюансы, о которых стоит знать заранее.
SID и objectGUID сохраняются. Это ключевой момент: при восстановлении объект получает обратно тот же SID, что был у него до удаления. Это означает, что все разрешения файловой системы, ресурсов SharePoint, почтовые ящики Exchange и другие объекты, привязанные к SID, автоматически снова становятся доступными восстановленному пользователю без каких-либо дополнительных действий.
Членство в группах. При включённой корзине атрибут member групп и memberOf пользователя сохраняются. После восстановления пользователь автоматически возвращается во все свои группы. Тем не менее рекомендуется проверить: выполните Get-ADUser -Identity ivanov -Properties MemberOf и сравните с ожидаемым набором групп.
Конфликт имён. Если за время, пока объект был в корзине, кто-то создал нового пользователя с тем же sAMAccountName или UPN, команда восстановления завершится с ошибкой. Решение: переименуйте нового пользователя перед восстановлением старого, либо восстанавливайте старый в другую OU с последующим переименованием.
Атрибуты Exchange / Microsoft 365. Почтовый ящик привязан к объекту пользователя через атрибут msExchMailboxGuid. При восстановлении из корзины этот атрибут возвращается, и Exchange / M365 должен автоматически переподключить ящик. Тем не менее после восстановления рекомендуется проверить состояние ящика через Exchange Admin Center или командой Get-Mailbox.
Автоматический мониторинг удалений через Event ID 4726
Корзина спасает после факта удаления, но лучшая стратегия — знать об удалении немедленно. Каждый раз, когда объект удаляется из AD, контроллер домена записывает в журнал Security событие с ID 4726 (для пользователей) или 4730 (для групп). Для этого должен быть включён аудит Account Management.
Следующий PowerShell-скрипт можно поставить в Task Scheduler с запуском каждые 15 минут — он будет проверять журнал и отправлять алёрт при обнаружении удалений:
# AD Deletion Monitor — запускать по расписанию каждые 15 минут
param(
[string]$SmtpServer = "mail.company.local",
[string]$AlertEmail = "admin@company.local",
[string]$FromEmail = "ad-monitor@company.local",
[int]$LookbackMinutes = 20 # чуть больше интервала запуска
)
$since = (Get-Date).AddMinutes(-$LookbackMinutes)
# Собираем события удаления пользователей, групп и компьютеров
$events = Get-WinEvent -FilterHashtable @{
LogName = "Security"
Id = @(4726, 4730, 4743)
StartTime = $since
} -ErrorAction SilentlyContinue
if ($events -and $events.Count -gt 0) {
$body = "ВНИМАНИЕ: Зафиксированы удаления объектов Active Directory`n`n"
foreach ($e in $events) {
$xml = [xml]$e.ToXml()
$data = $xml.Event.EventData.Data
$name = ($data | Where-Object {$_.Name -eq "TargetUserName"})."#text"
$who = ($data | Where-Object {$_.Name -eq "SubjectUserName"})."#text"
$body += "[$($e.TimeCreated)] Event $($e.Id) - Удалён: $name - Кем: $who`n"
}
Send-MailMessage `
-SmtpServer $SmtpServer `
-From $FromEmail `
-To $AlertEmail `
-Subject "AD Alert: удалены объекты ($($events.Count) событий)" `
-Body $body `
-Encoding UTF8
Write-Host "Алёрт отправлен: $($events.Count) событий удаления"
} else {
Write-Host "Удалений за последние $LookbackMinutes минут не обнаружено"
}
Для включения аудита через GPO: Computer Configuration → Windows Settings → Security Settings → Advanced Audit Policy → Account Management — включите Audit User Account Management и Audit Security Group Management для Success и Failure.
Чеклист: включить прямо сейчас
Если вы прочитали статью и ещё не включили корзину AD — вот лаконичный список действий. Это займёт пять минут и сэкономит часы работы в случае инцидента:
- Убедиться, что функциональный уровень леса — не ниже Windows Server 2008 R2
- Открыть PowerShell на DC под Enterprise Admin
- Выполнить Get-ADOptionalFeature — убедиться, что корзина ещё не включена
- Выполнить Enable-ADOptionalFeature "Recycle Bin Feature" со всеми параметрами
- Дождаться завершения репликации (repadmin /replsummary)
- Проверить статус повторно — EnabledScopes должен содержать имя леса
- Открыть ADAC — убедиться, что контейнер Deleted Objects виден
- Настроить аудит Account Management через GPO
- Поставить PowerShell-скрипт мониторинга Event ID 4726 в Task Scheduler
- Задокументировать включение корзины в базе знаний / регламенте ИТ-отдела
Корзина Active Directory — один из редких случаев, когда пятиминутная настройка один раз может буквально спасти вас от нескольких часов аварийного восстановления и звонков от директора. Не откладывайте: включите её сегодня, пока ещё не случилось ничего плохого.
ООО «АйТи Фреш» возьмёт это на себя
Не хватает времени или своих специалистов — мы настроим, оптимизируем и возьмём вашу IT-инфраструктуру на постоянное сопровождение. Работаем с юридическими лицами в Москве и регионах. Собственный дата-центр, команда из 8 серверов Dell Xeon Platinum 8280 на базе МТС.