Понедельник, 9:15 утра. Сотрудник звонит в техподдержку: «Не могу войти в систему». Вы проверяете консоль — учётной записи нет. Кто-то удалил пользователя из Active Directory. Возможно, ошибочно убрали целую OU с двадцатью аккаунтами. В классическом сценарии без AD Recycle Bin вас ждут часы работы: восстановление из резервной копии, ручная перепривязка групп, сброс настроек профиля. Но если корзина Active Directory была включена заранее, та же задача займёт буквально тридцать секунд — и пользователь вернётся со всеми членствами в группах, атрибутами и правами доступа нетронутыми.

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 без корзины Активный объект → удаление → tombstone (до 180 дней, большинство атрибутов очищено) → окончательное удаление сборщиком мусора

Когда корзина 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 или выше, корзина по-прежнему остаётся выключенной по умолчанию — просто по причине исторической инерции.

Важно Включение AD Recycle Bin — необратимое действие. После включения нельзя вернуться к предыдущему функциональному уровню леса. Это единственное реальное ограничение, которое не является проблемой ни для одного современного домена.

Что касается требований: функциональный уровень леса должен быть 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

Разберём каждый параметр:

После выполнения команды изменение реплицируется на все контроллеры домена. В большой инфраструктуре дождитесь завершения репликации, прежде чем проверять результат. Принудительно запустить репликацию можно командой repadmin /syncall /AdeP.

Проверка после включения Повторно выполните команду Get-ADOptionalFeature из предыдущего раздела. В поле EnabledScopes теперь должно отображаться имя вашего леса.

Восстановление через 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, и предоставляет удобный интерфейс для работы с корзиной.

  1. Откройте Active Directory Administrative Center через меню «Средства» в Server Manager или введите dsac.exe в строке выполнения.
  2. В левой панели разверните дерево вашего домена и найдите контейнер Deleted Objects. Если его не видно — убедитесь, что корзина включена.
  3. В центральной панели отобразится список всех удалённых объектов. Используйте поле фильтра сверху для быстрого поиска по имени или типу объекта.
  4. Выберите нужный объект (или несколько с зажатым Ctrl), нажмите правую кнопку мыши и выберите Восстановить (Restore) для возврата в исходное место или Восстановить в... (Restore To) для выбора другой OU.
  5. Подтвердите операцию. Объект немедленно появится в указанном месте со всеми исходными атрибутами.

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
Осторожно с authoritative restore Авторитативное восстановление помечает объекты с увеличенным USN, и после перезагрузки DC эти изменения реплицируются на остальные контроллеры, перезаписывая всё, что было изменено с момента создания бэкапа. Используйте этот метод взвешенно в многодоменной среде.

Вариант 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 — вот лаконичный список действий. Это займёт пять минут и сэкономит часы работы в случае инцидента:

Корзина Active Directory — один из редких случаев, когда пятиминутная настройка один раз может буквально спасти вас от нескольких часов аварийного восстановления и звонков от директора. Не откладывайте: включите её сегодня, пока ещё не случилось ничего плохого.

Нужна помощь специалистов?

ООО «АйТи Фреш» возьмёт это на себя

Не хватает времени или своих специалистов — мы настроим, оптимизируем и возьмём вашу IT-инфраструктуру на постоянное сопровождение. Работаем с юридическими лицами в Москве и регионах. Собственный дата-центр, команда из 8 серверов Dell Xeon Platinum 8280 на базе МТС.

15+лет опыта
25+клиентов
40Gсвоя сеть
24/7поддержка