Aller au contenu

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)