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
- Tiering de Administração e PAW: Separar Contas Admin das de Trabalho Diário — a mesma higiene de contas, elevada a arquitectura.
- BadSuccessor: Risco do dMSA no Active Directory — a nova família de ataques sobre contas de máquina que correm serviços.
- Windows LAPS: Gerir Passwords de Administrador Local — o contrário do ciclo de restore: não perder a conta de admin para ter de a restaurar.
- NTLM a Caminho da Extinção: Auditoria e Migração para Kerberos — outra migração de protocolo antigo no mesmo domínio.
Fontes
- Enable and use Active Directory Recycle Bin (Windows Server docs)
- Restore-ADObject (módulo ActiveDirectory)
- Enable-ADOptionalFeature (módulo ActiveDirectory)
- The AD Recycle Bin: Understanding, Implementing, Best Practices and Troubleshooting (AskDS, blog arquivado)
- [MS-ADTS] Tombstone Lifetime and Deleted-Object Lifetime