Activation et exploitation de la corbeille Active Directory
Activation de la fonctionnalité
La corbeille Active Directory n'est pas activée par défaut. Voici comment l'activer en commande PowerShell (à adapter à l'environnement) :
Enable-ADOptionalFeature -Identity "CN=Recycle Bin Feature,CN=Optional Features,CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=it-connect,DC=local" -Scope ForestOrConfigurationSet -Target "it-connect.local"
Exploitation de la corbeille
Voici un script PowerShell qui permettra d'explorer le contenu de la corbeille et de restaurer un ou plusieurs objets :
# Vérification et installation du module Active Directory
$ModuleName = "ActiveDirectory"
if (-not (Get-Module -ListAvailable -Name $ModuleName)) {
Write-Host "Le module $ModuleName n'est pas installé. Voulez-vous l'installer ? (O/N)" -ForegroundColor Yellow
$response = Read-Host
if ($response -match "[oO]") {
Install-WindowsFeature -Name "RSAT-AD-PowerShell" -IncludeAllSubFeature
Import-Module ActiveDirectory
} else {
Write-Host "Le module est requis pour exécuter ce script." -ForegroundColor Red
exit
}
}
# Fonction pour lister les objets supprimés avec ID
function Lister-Elements-Supprimes {
Write-Host "`n🔍 Recherche des objets supprimés..." -ForegroundColor Cyan
$global:DeletedObjects = Get-ADObject -Filter 'isDeleted -eq $True' -IncludeDeletedObjects |
Select-Object @{Name="ID";Expression={(++$global:Counter)}}, Name, DistinguishedName, ObjectClass
if ($DeletedObjects) {
$DeletedObjects | Format-Table -AutoSize
} else {
Write-Host "Aucun objet supprimé trouvé." -ForegroundColor Yellow
}
}
# Fonction pour lister les objets supprimés selon un filtre
function Lister-Elements-Par-Filtre {
$FiltreDate = Read-Host "Entrez le nombre de jours depuis la suppression (ex: 7)"
$DateLimite = (Get-Date).AddDays(-[int]$FiltreDate)
$FiltreType = Read-Host "Entrez le type d'objet à lister (user/group/OU/all)"
if ($FiltreType -eq "all") { $FiltreType = "*" }
Write-Host "🔍 Recherche des objets supprimés depuis $FiltreDate jours..." -ForegroundColor Cyan
$ObjetsFiltres = Get-ADObject -Filter 'isDeleted -eq $True' -IncludeDeletedObjects -Properties ObjectClass, WhenChanged |
Where-Object { $_.WhenChanged -ge $DateLimite -and $_.ObjectClass -like $FiltreType }
if ($ObjetsFiltres) {
$ObjetsFiltres | Format-Table Name, DistinguishedName, ObjectClass -AutoSize
} else {
Write-Host "❌ Aucun objet correspondant trouvé." -ForegroundColor Red
}
}
# Fonction pour restaurer un élément supprimé par sélection ID
function Restaurer-Element-Supprime {
Lister-Elements-Supprimes
if (-not $DeletedObjects) { return }
$Choix = Read-Host "Entrez le numéro de l'objet à restaurer"
$ObjetSelectionne = $DeletedObjects | Where-Object { $_.ID -eq $Choix }
if ($ObjetSelectionne) {
Restore-ADObject -Identity $ObjetSelectionne.DistinguishedName
Write-Host "✅ Objet restauré avec succès !" -ForegroundColor Green
} else {
Write-Host "❌ ID invalide." -ForegroundColor Red
}
}
# Fonction pour restaurer les objets supprimés selon un filtre
function Restaurer-Par-Filtre {
Lister-Elements-Par-Filtre
$Choix = Read-Host "Voulez-vous restaurer tous les objets listés ? (O/N)"
if ($Choix -match "[oO]") {
$ObjetsFiltres = Get-ADObject -Filter 'isDeleted -eq $True' -IncludeDeletedObjects -Properties ObjectClass, WhenChanged |
Where-Object { $_.WhenChanged -ge $DateLimite -and $_.ObjectClass -like $FiltreType }
foreach ($Objet in $ObjetsFiltres) {
Restore-ADObject -Identity $Objet.DistinguishedName
Write-Host "✅ Restauré : $($Objet.Name) ($($Objet.ObjectClass))" -ForegroundColor Green
}
}
}
# Menu principal
do {
Write-Host "`n===== Gestion de la Corbeille AD =====" -ForegroundColor Blue
Write-Host "1 - Lister tous les éléments supprimés"
Write-Host "2 - Lister les éléments supprimés selon un filtre"
Write-Host "3 - Restaurer un élément supprimé"
Write-Host "4 - Restaurer un groupe et ses membres"
Write-Host "5 - Restaurer une OU complète"
Write-Host "6 - Supprimer définitivement un objet"
Write-Host "7 - Exporter la liste en CSV"
Write-Host "8 - Restaurer les éléments selon un filtre"
Write-Host "9 - Quitter"
$Choix = Read-Host "Entrez votre choix"
switch ($Choix) {
"1" { Lister-Elements-Supprimes }
"2" { Lister-Elements-Par-Filtre }
"3" { Restaurer-Element-Supprime }
"4" { Restaurer-Groupe-Et-Membres }
"5" { Restaurer-OU }
"6" { Supprimer-Definitivement }
"7" { Exporter-CSV }
"8" { Restaurer-Par-Filtre }
"9" { exit }
default { Write-Host "❌ Choix invalide." -ForegroundColor Red }
}
} while ($true)