· 12 мин чтения

Корзина Active Directory: как за 30 секунд вернуть удалённого пользователя со всеми правами

Меня зовут Семёнов Евгений Сергеевич, я директор АйТи Фреш и за 15 лет администрирования Windows-инфраструктур видел десятки случаев, когда HR-менеджер «случайно» удалял из AD не того сотрудника, а админ потом сутки восстанавливал доступы из бэкапа. Если у вас включена корзина Active Directory — этот сценарий решается одной командой PowerShell за полминуты, без откатов, без перезагрузок контроллера и без нервов. Если не включена — пора это исправить, и вот пошаговый гид.

Зачем нужна корзина Active Directory

Раньше, до Windows Server 2008 R2, единственным штатным способом восстановления удалённого объекта был механизм tombstone reanimation — «оживление» надгробия. Это работало, но возвращало объект без большинства атрибутов: без членств в группах, без описания, без должности, иногда даже без UPN. Восстановленный таким способом пользователь по факту был пустой оболочкой со старым SID, и админу приходилось вручную возвращать его во все группы доступа. На крупном домене с сотней групп это занимало часы.

Корзина Active Directory (AD Recycle Bin) решает проблему радикально. При включённой корзине удалённые объекты не превращаются в tombstone сразу, а проходят промежуточную стадию «logical deletion» — длительностью 180 дней по умолчанию. Все атрибуты и связи сохраняются, и одной командой Restore-ADObject объект возвращается на исходное место со всеми правами.

Проверка состояния корзины перед включением

Прежде чем что-то включать, я всегда проверяю текущее состояние. На любом контроллере домена откройте PowerShell от имени администратора:

Get-ADOptionalFeature -Filter * | Select-Object Name, EnabledScopes, RequiredDomainMode

Если в выводе у строки Recycle Bin Feature поле EnabledScopes пустое — корзина не активирована. Также убедитесь, что функциональный уровень леса не ниже Windows Server 2008 R2:

Get-ADForest | Select-Object Name, ForestMode
Get-ADDomain | Select-Object Name, DomainMode

Если у вас стоит более ранний уровень — сначала придётся повысить его командой Set-ADForestMode. Помните: повышение функционального уровня необратимо, понизить обратно нельзя.

Включение корзины Active Directory

Когда все проверки пройдены, включаем корзину одной командой. Делать это нужно на контроллере с ролью FSMO Schema Master, иначе репликация может задержаться:

Enable-ADOptionalFeature -Identity 'Recycle Bin Feature' `
  -Scope ForestOrConfigurationSet `
  -Target 'corp.example.ru' -Confirm:$false

Подтверждать включение нужно осознанно: отключить корзину после активации невозможно. Это лимит платформы Microsoft, а не наша придирка. Зато никаких побочных эффектов на работе домена не появляется — функция включается прозрачно для пользователей.

После включения дождитесь завершения межсайтовой репликации (типично 15–60 минут на средних доменах). Проверить статус репликации:

Get-ADReplicationPartnerMetadata -Target * -Scope Server |
  Select-Object Server, Partner, LastReplicationSuccess

Срок хранения удалённых объектов и его настройка

По умолчанию удалённый объект хранится в корзине 180 дней. После этого он переходит в стадию tombstone (надгробие) и теряет большинство атрибутов. Срок жизни задаётся атрибутом msDS-deletedObjectLifetime на объекте контейнера CN=Directory Service. Я рекомендую увеличивать его до 365 дней, особенно для компаний с длинными отпускными циклами и проектами «уволили — потом вернули»:

$ds = "CN=Directory Service,CN=Windows NT,CN=Services," + `
       (Get-ADRootDSE).ConfigurationNamingContext
Set-ADObject -Identity $ds -Partition (Get-ADRootDSE).ConfigurationNamingContext `
  -Replace @{ "msDS-deletedObjectLifetime" = 365 }

Учтите: чем длиннее срок, тем больше места занимает база NTDS.dit. На домене 5 000 пользователей с активной ротацией кадров за год база может вырасти на 1–2 ГБ. Это не критично, но мониторить надо.

Восстановление пользователя через PowerShell

Допустим, вашего бухгалтера Иванову уволил кадровик в спешке, а через час выяснилось, что увольнение оформляется только следующим месяцем. В классическом сценарии без корзины — это два часа работы и звонок директору. С включённой корзиной — две команды:

# Находим объект по имени, отображаются только удалённые
Get-ADObject -Filter {DisplayName -eq "Иванова Анна Петровна"} `
  -IncludeDeletedObjects -Properties *

# Восстанавливаем по DN или ObjectGUID
Get-ADObject -Filter {SamAccountName -eq "ivanova"} `
  -IncludeDeletedObjects | Restore-ADObject

После выполнения объект возвращается в исходную OU с теми же членствами, паролем, должностью, телефоном и атрибутом userAccountControl. Я рекомендую сразу проверить через Get-ADUser ivanova -Properties MemberOf — все группы доступа должны быть на месте.

Если объекты с одинаковым именем удалялись несколько раз, фильтруйте по дате удаления:

Get-ADObject -Filter {SamAccountName -eq "ivanova"} `
  -IncludeDeletedObjects -Properties WhenChanged |
  Sort-Object WhenChanged -Descending | Select-Object -First 1 |
  Restore-ADObject

Восстановление через Active Directory Administrative Center

Не все админы любят PowerShell, и для них Microsoft встроила удобный графический интерфейс. Откройте Active Directory Administrative Center (dsac.exe) на любом контроллере или member-сервере с RSAT. В дереве слева — ваш домен, контейнер Deleted Objects. В нём — все удалённые за 180 дней объекты с фильтром по дате, типу и имени.

Правый клик на нужном объекте → Restore вернёт его в исходный OU. Если исходного контейнера уже нет (например, OU тоже удалили) — выберите Restore To... и укажите целевой контейнер. Этот же интерфейс умеет показывать атрибуты удалённого объекта без восстановления — полезно, когда нужно вспомнить, в каких группах состоял пользователь.

Восстановление целой OU с пользователями

Самый сложный сценарий — когда удалили целое подразделение. Здесь важен порядок: восстанавливать нужно строго от родительских контейнеров к дочерним. Сначала OU, потом вложенные OU, и только в конце — пользователей и компьютеры. Если попытаться восстановить пользователя раньше его OU, команда упадёт с ошибкой «The specified target object is not a directory object».

# Восстанавливаем родительскую OU
Get-ADObject -Filter {Name -eq "Бухгалтерия"} `
  -IncludeDeletedObjects | Restore-ADObject

# Затем все объекты, что были внутри (по lastKnownParent)
Get-ADObject -SearchBase "CN=Deleted Objects,DC=corp,DC=example,DC=ru" `
  -Filter {lastKnownParent -eq "OU=Бухгалтерия,DC=corp,DC=example,DC=ru"} `
  -IncludeDeletedObjects -SearchScope OneLevel | Restore-ADObject

Я рекомендую делать это поэтапно, с проверкой после каждого шага. На крупных OU с 50+ объектами лучше написать скрипт с обработкой ошибок и логированием.

Реальный кейс: 78 удалённых пользователей за вечер

В августе 2025 года к нам в АйТи Фреш обратилась логистическая компания (190 рабочих мест, домен на 4 контроллера). Их штатный администратор написал PowerShell-скрипт для массового отключения уволенных за квартал и случайно поменял Disable-ADAccount на Remove-ADUser. За три минуты из домена исчезли 78 учётных записей, включая нескольких действующих топ-менеджеров.

Когда мы приехали (через час после звонка), бэкап был — но полностью свежий, ночной. Восстановление через DSRM заняло бы 6–8 часов с остановкой одного контроллера и риском нарушения репликации. К счастью, корзина AD у них была включена ещё нашими предшественниками. Мы написали скрипт, который выгрузил все удалённые за последний день объекты, отфильтровал по времени удаления и восстановил их пакетом:

$cutoff = (Get-Date).AddHours(-3)
Get-ADObject -SearchBase "CN=Deleted Objects,DC=cargo,DC=local" `
  -Filter {ObjectClass -eq "user" -and WhenChanged -gt $cutoff} `
  -IncludeDeletedObjects -SearchScope OneLevel |
  ForEach-Object {
    try {
      Restore-ADObject -Identity $_.ObjectGUID
      Write-Host "OK: $($_.SamAccountName)" -ForegroundColor Green
    } catch {
      Write-Host "FAIL: $($_.SamAccountName) - $_" -ForegroundColor Red
    }
  }

Весь процесс занял 12 минут. 78 пользователей вернулись со всеми членствами в группах (а это 240+ групп безопасности на сетевые ресурсы, права в 1С, доступ к VPN). Без корзины такая авария обошлась бы клиенту в день простоя и 80–100 тыс. руб. восстановительных работ.

Что НЕ восстанавливает корзина AD

Корзина — это инструмент логического восстановления внутри AD. Она не возвращает:

Поэтому корзина — необходимое, но не достаточное условие безопасности AD. Регулярный бэкап системного состояния контроллеров через Windows Server Backup или Veeam B&R остаётся обязательным.

Best practices для корзины AD от АйТи Фреш

За 15 лет работы с доменами я выработал короткий чек-лист, который применяю на каждом новом проекте миграции AD:

Что делать, если корзина не была включена

Этот раздел для тех, кто пришёл сюда уже после аварии. Без включённой корзины удалённый объект превращается в tombstone, у которого вычищено 90 % атрибутов. Возможные пути восстановления:

  1. Tombstone reanimation через ldp.exe или Restore-ADObject. Сработает только в течение Tombstone Lifetime (180 дней), вернёт объект без членств, без атрибутов профиля. Дальше — ручной труд.
  2. Восстановление из бэкапа в режиме DSRM. Перезагрузка контроллера в Directory Services Restore Mode, восстановление NTDS.dit из бэкапа, авторитативное восстановление нужных объектов через ntdsutil. На домене 1000+ пользователей — 4–8 часов работы и риск нарушения репликации.
  3. Восстановление через изолированную виртуальную машину. Поднимаем копию контроллера из бэкапа на отдельной сети, экспортируем нужные объекты в LDIF и импортируем в продакшн. Безопаснее, но дольше.

Если у вас нет ни корзины, ни свежего бэкапа, ни компетенций для DSRM — звоните, мы помогаем с такими задачами регулярно. Чаще всего восстановление 10–20 учётных записей укладывается в 4–6 часов работы.

Включите корзину AD до того, как она вам понадобится

Я выезжаю на бесплатный аудит AD к каждому новому корпоративному клиенту в Москве и в радиусе 50 км от МКАД. За 2–3 часа смотрим состояние домена, включаем корзину, проверяем бэкапы, настраиваем аудит критичных операций. Никаких обязательств, никаких разовых счетов.

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

FAQ — частые вопросы по корзине Active Directory

С какой версии Windows Server работает корзина AD?
Корзина Active Directory доступна начиная с Windows Server 2008 R2. Для её включения требуется уровень леса не ниже Windows Server 2008 R2. Включение необратимо — отключить корзину после активации нельзя.
Сколько времени удалённый объект хранится в корзине?
По умолчанию объект хранится 180 дней (msDS-deletedObjectLifetime) — за это время его можно восстановить со всеми атрибутами. После — переходит в стадию tombstone и теряет большинство атрибутов.
Восстанавливаются ли членства в группах при использовании корзины?
Да, при включённой корзине AD пользователь возвращается со всеми членствами в группах безопасности и распространения. Это ключевое отличие от старого механизма tombstone reanimation.
Можно ли восстановить целую OU с пользователями?
Да, но восстанавливать нужно строго в обратном порядке удаления — сначала родительская OU, затем дочерние OU и только потом сами объекты пользователей и компьютеров.
Что делать, если корзина не была включена и объект уже удалён?
Тогда поможет только восстановление из бэкапа Active Directory с использованием режима DSRM или утилиты ntdsutil — сложно, долго и с риском нарушить репликацию. Лучше включить корзину сразу после развёртывания домена.

Подпишитесь на рассылку ITfresh

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

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.