O estagiário tinha a consola Utilizadores e Computadores do Active Directory num ecrã e o chat no segundo ecrã. Clique direito na OU (unidade organizacional) Contabilidade, Eliminar, confirmar — e caiu a unidade inteira: contas de utilizador, grupos, impressoras e duas sub-OUs. Sem o Active Directory Recycle Bin, isso vale uma tarde de recriação manual. Com o Cesto activado são três comandos PowerShell e dez minutos.

O Cesto preserva todos os atributos do apagado — de valor simples e de valores ligados (link-valued) — e devolve o conjunto num estado lógico igual ao do instante anterior: uma conta restaurada retoma automaticamente as pertenças a grupos dentro e entre domínios. A condição é uma só: activar o Cesto ANTES de precisares dele. Este guia activa-o, encontra os apagados e devolve-os em lote.

A decisão: activar numa PME

Numa PME com DC (controlador de domínio) na última década, a activação não tem contrapartidas técnicas — os requisitos já vêm cumpridos:

  • Nível funcional de floresta em Windows Server 2008 R2 ou superior — é o único exigido pela Microsoft; qualquer rede com DCs 2012 ou mais recentes passa.
  • Conta no grupo Enterprise Admins (ou equivalente) — a activação é ao nível da floresta, não do domínio.
  • RSAT (Remote Server Administration Tools) instalado: o Active Directory Administrative Center (ADAC) ou o módulo do Active Directory para Windows PowerShell.

O preço: a operação é irreversível — não se desactiva o Cesto — e os apagados continuam a gastar espaço no ficheiro NTDS.dit até expirar a janela. Em troca: recuperação sem parar um DC, sem restaurar cópias de segurança e sem perder palavras-passe. A floresta ainda não está em 2008 R2? Sobe os níveis funcionais primeiro — o 2008 R2 admite voltar atrás enquanto o Cesto não estiver activado.

O que o Cesto NÃO recupera bem:

  • Apagados anteriores à activação — o Cesto não é retroactivo: os tombstones da época viram reciclados na própria activação e somem do contentor Deleted Objects. Só um authoritative restore de uma cópia de segurança do AD DS (Active Directory Domain Services) anterior à activação os traz.
  • Objectos fora da janela msDS-DeletedObjectLifetime (180 dias por omissão): passado o prazo, isRecycled passa a TRUE, os atributos descartam-se e o restauro é impossível.
  • Não é máquina do tempo: repõe o objecto como estava no apagar e não desfaz mudanças feitas depois em objectos vivos.

Activar: ADAC ou PowerShell

1. Verificar o nível funcional

Get-ADForest | Select-Object ForestMode,DomainNamingMaster,SchemaMaster
Get-ADDomain | Select-Object DomainMode

Saída esperada numa floresta actualizada: ForestMode Windows2016Forest e DomainMode Windows2016Domain, e o DomainNamingMaster e o SchemaMaster à vista. Níveis 2000/2008 mistos? Sobe-os antes de continuar.

2. Pelo ADAC (dsac.exe)

  • 1. Abre o ADAC: em PowerShell elevado escreve dsac.exe, ou via menu Tools do Server Manager.
  • 2. Escolhe Manage → Add Navigation Nodes, selecciona a floresta raiz e confirma com OK.
  • 3. No painel Tasks à direita, escolhe Enable Recycle Bin.
  • 4. Escolhe OK no aviso — a activação é irreversível — e OK na mensagem que pede para refrescar o ADAC.
  • 5. Refresca com F5: o contentor Deleted Objects fica visível no painel de navegação.

3. Pelo PowerShell (o mesmo efeito)

# no DC que detém a função FSMO (Flexible Single Master Operations)
# domain naming master — ou aponta -Server a ele
Enable-ADOptionalFeature "Recycle Bin Feature" -Scope ForestOrConfigurationSet -Target contoso.com -Server DC10
# responde Y à última confirmação
Get-ADOptionalFeature -Filter "Name -eq 'Recycle Bin Feature'" -Property EnabledScopes
# saída esperada: EnabledScopes prenchido (vazio = não activo)

Se a activação falhar com erro, move schema master e domain naming master para o mesmo DC no domínio raiz e corre o comando a partir desse DC — é o tratamento previsto para florestas de vários domínios.

Encontrar o que foi apagado

Os apagados vivem no contentor Deleted Objects com DN (distinguished name) disfarçado — o RDN (relative distinguished name) ganha um sufixo \0ADEL + GUID (identificador global único). Nunca copies esses DNs à mão: deixa o pipeline alimentar o Restore-ADObject, que aceita o Identity como GUID ou como objecto.

Get-ADObject -Filter 'isDeleted -eq $true -and Name -ne "Deleted Objects"' -IncludeDeletedObjects -Property whenChanged,msDS-LastKnownRDN,lastKnownParent | Sort-Object whenChanged -Descending

Saída esperada: DNs na forma CN=Pedro Faria\0ADEL:6b8c5d…,CN=Deleted Objects,DC=contoso,DC=com — o msDS-LastKnownRDN guarda o nome antigo e o lastKnownParent o sítio de origem.

Restaurar: do utilizador isolado à OU inteira

Um utilizador solto

Get-ADObject -Filter 'samAccountName -eq "pfaria"' -IncludeDeletedObjects | Restore-ADObject
# sem saída em caso de sucesso
# confirma: as pertenças a grupos voltam intactas do instante anterior ao apagar
Get-ADUser pfaria -Property memberOf | Select-Object -ExpandProperty memberOf

A OU da contabilidade (o estagiário de ontem)

Passo 1 — inventário: filtra os apagados cujo lastKnownParent era a OU. Apanha só filhos directos — os filhos de sub-OUs apanham-se na repetição do passo 3.

Get-ADObject -Filter 'isDeleted -eq $true -and lastKnownParent -eq "OU=Contabilidade,DC=contoso,DC=com"' -IncludeDeletedObjects -Property whenChanged,msDS-LastKnownRDN | Sort-Object whenChanged -Descending | Format-Table msDS-LastKnownRDN,whenChanged -AutoSize

Passo 2 — a OU volta primeiro: os filhos só repousam num contentor existente.

Get-ADObject -Filter 'objectClass -eq "organizationalUnit" -and msDS-LastKnownRDN -eq "Contabilidade"' -IncludeDeletedObjects | Restore-ADObject

Passo 3 — os filhos em lote, do nível mais raso para dentro: todos os apagados vivem lado a lado em CN=Deleted Objects, por isso a ordem que decide é a profundidade da OU, não o comprimento do DN. O lote repõe os pais antes dos filhos; com sub-OUs, volta a correr o passo por nível.

Get-ADObject -Filter 'isDeleted -eq $true -and lastKnownParent -eq "OU=Contabilidade,DC=contoso,DC=com"' -IncludeDeletedObjects | Sort-Object { $_.DistinguishedName.Length } | Restore-ADObject

Passo 4 — verificação: a OU está de pé, com utilizadores e grupos dentro, no sítio de sempre.

Get-ADUser -SearchBase "OU=Contabilidade,DC=contoso,DC=com" -SearchScope OneLevel -Filter * | Format-Table Name,SamAccountName -AutoSize

Armadilhas

  • Sem TargetPath, o Restore-ADObject devolve o objecto a lastKnownParent, e sem NewName usa o msDS-LastKnownRDN. Para repatriar para outro sítio (ex.: OU nova), passa ambos.
  • O TargetPath tem de apontar a um contentor ou OU existente — restaurar os filhos antes do pai falha com erro de contentor inexistente.
  • Contra um RODC (read-only domain controller) ou um snapshot do AD, o Restore-ADObject não funciona: aponta sempre -Server a um DC gravável.
  • Se um apagado não aparece na lista do Get-ADObject com -IncludeDeletedObjects, passou a janela ou é anterior à activação — os reciclados ficam invisíveis.
  • A janela é o msDS-DeletedObjectLifetime, que por omissão herda o tombstoneLifetime (180 dias de fábrica — com o atributo a null, a spec MS-ADTS aplica 60). Enquanto ela corre, o restauro é directo. Depois dela, isRecycled passa a TRUE — o restore acabou e o objecto fica invisível ao -IncludeDeletedObjects — e só quando acabar o tombstoneLifetime é que o garbage collection remove o objecto fisicamente. Confere os teus valores e alarga-os assim:
Get-ADObject -Identity "CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=contoso,DC=com" -Partition "CN=Configuration,DC=contoso,DC=com" -Property tombstoneLifetime,msDS-DeletedObjectLifetime | Format-List tombstoneLifetime,msDS-DeletedObjectLifetime
Set-ADObject -Identity "CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=contoso,DC=com" -Partition "CN=Configuration,DC=contoso,DC=com" -Replace @{"msDS-DeletedObjectLifetime" = 365}

Cesto, backup ou authoritative restore?

Três vias para trazer o AD de volta — escolhe pelo estado do objecto que perdeste:

Via Quando usar O que pesa
Cesto do AD (Restore-ADObject) Apagado DEPOIS de activar o Cesto e dentro da janela Online, granular, minutos. Devolve atributos, members e ACLs (listas de controlo de acesso) intactos, sem parar um DC.
Authoritative restore (System State + ntdsutil) Objecto anterior à activação do Cesto, ou fora da janela Exige cópia de segurança System State anterior ao apagar, arranque em DSRM (Directory Services Restore Mode) e marca autoritativa para a replicação espalhar a versão antiga. O que mudou desde o backup fica sobreposto.
Backup do AD (restauro não autoritativo) Base de dados comprometida, reversão de laboratório, DC perdido Traz a base de dados inteira para trás. Sem marca autoritativa, os outros DC replicam o estado actual por cima — o apagado não sobrevive.

Regra de bolso numa PME: caiu ontem → Cesto. Caiu antes do Cesto existir → System State + authoritative restore. Perdeste tudo numa segunda-feira → restauro da base de dados e devolves os objectos um a um a seguir.

Artigos Relacionados

Fontes