# Remove AD `howard` account (misspelled/orphan account, not used by anyone).
# Captures pre-state to D:\Backups and confirms removal. AD Recycle Bin keeps
# the object for 180 days so Restore-ADObject is available if needed.

$ErrorActionPreference = 'Stop'
Import-Module ActiveDirectory

$ts = Get-Date -Format 'yyyy-MM-dd-HHmmss'
$bd = "D:\Backups\howard-delete-$ts"
New-Item -Path $bd -ItemType Directory -Force | Out-Null

try {
    $u = Get-ADUser -Identity howard -Properties *
    Write-Output 'Pre-delete state:'
    Write-Output "  SAM:          $($u.SamAccountName)"
    Write-Output "  UPN:          $($u.UserPrincipalName)"
    Write-Output "  Display:      $($u.DisplayName)"
    Write-Output "  Description:  $($u.Description)"
    Write-Output "  mail:         $($u.mail)"
    Write-Output "  proxyAddrs:   $(($u.proxyAddresses) -join '; ')"
    Write-Output "  DN:           $($u.DistinguishedName)"
    Write-Output "  Enabled:      $($u.Enabled)"
    Write-Output "  PwdLastSet:   $($u.PasswordLastSet)"
    Write-Output "  Created:      $($u.whenCreated)"
    Write-Output ''
    Write-Output '  Group memberships:'
    Get-ADPrincipalGroupMembership -Identity howard | ForEach-Object {
        Write-Output "    - $($_.Name)"
    }

    $u | Export-Clixml "$bd\howard-pre.xml"
    Write-Output ''
    Write-Output "Pre-state exported to: $bd\howard-pre.xml"
    Write-Output ''
    Write-Output 'Removing AD user howard...'
    Remove-ADUser -Identity howard -Confirm:$false
    Write-Output '[OK] Remove-ADUser returned without error.'

    Write-Output ''
    Write-Output 'Verifying removal:'
    try {
        Get-ADUser -Identity howard -ErrorAction Stop | Out-Null
        Write-Output '[FAIL] Account still exists'
        exit 1
    } catch {
        Write-Output "[OK] Get-ADUser -Identity howard returns: $($_.Exception.Message.Split([char]10)[0])"
    }

    Write-Output ''
    Write-Output 'Recycle Bin (180 day retention) entry for rollback:'
    $deleted = Get-ADObject -Filter { SamAccountName -eq 'howard' } -IncludeDeletedObjects -Properties whenChanged, isDeleted, ObjectGUID, lastKnownParent
    $deleted | Select-Object Name, ObjectGUID, isDeleted, whenChanged, lastKnownParent | Format-List | Out-String | Write-Output
    Write-Output 'Rollback command (within 180 days):'
    if ($deleted) {
        $guid = $deleted | Select-Object -First 1 -ExpandProperty ObjectGUID
        Write-Output "  Restore-ADObject -Identity $guid"
    }
} catch {
    Write-Output "FAIL: $_"
    exit 1
}
