commit e8fde7102f48cb2552a0fbf2a61f90fdaa9caffd Author: 7ka1 <7ka1@noreply.localhost> Date: Thu Nov 20 15:25:54 2025 +0000 Téléverser les fichiers vers "/" diff --git a/move_expired_users.ps1 b/move_expired_users.ps1 new file mode 100644 index 0000000..7d4f928 --- /dev/null +++ b/move_expired_users.ps1 @@ -0,0 +1,77 @@ +# ----------------------------------------------------------- +# Script : move_expired_users.ps1 +# Description : Déplace les utilisateurs dont le compte est expiré +# vers l'OU "Retired". Crée l'OU si elle n'existe pas. +# ----------------------------------------------------------- + +# --- CONFIGURATION --- +# Nom de l'OU de destination +$TargetOUName = "Retired" + +# Base du domaine (À ADAPTER : ex: DC=happykoalas,DC=com) +$DomainDN = "DC=happykoalas,DC=com" + +# Construction du chemin complet (Distinguished Name) de l'OU cible +$TargetOUDN = "OU=$TargetOUName,$DomainDN" + +# Date et heure actuelles pour la comparaison +$CurrentDate = Get-Date + +# --- IMPORTATION MODULE --- +Import-Module ActiveDirectory + +# --- ETAPE 1 : GESTION DE L'OU "RETIRED" --- +Write-Host "Vérification de l'OU '$TargetOUName'..." -ForegroundColor Cyan + +try { + if (-not (Get-ADOrganizationalUnit -Filter "DistinguishedName -eq '$TargetOUDN'" -ErrorAction SilentlyContinue)) { + Write-Host "L'OU '$TargetOUName' n'existe pas. Création en cours..." -ForegroundColor Yellow + New-ADOrganizationalUnit -Name $TargetOUName -Path $DomainDN + Write-Host "OU créée avec succès." -ForegroundColor Green + } else { + Write-Host "L'OU '$TargetOUName' existe déjà." -ForegroundColor Green + } +} +catch { + Write-Host "Erreur critique lors de la gestion de l'OU : $_" -ForegroundColor Red + Exit # On arrête le script si on ne peut pas gérer l'OU de destination +} + +# --- ETAPE 2 : RECHERCHE ET DÉPLACEMENT DES UTILISATEURS --- +Write-Host "`nRecherche des utilisateurs expirés..." -ForegroundColor Cyan + +# Recherche des utilisateurs dont la date d'expiration est inférieure à la date actuelle +# On exclut les comptes sans date d'expiration (qui valent souvent NULL ou 0) +$ExpiredUsers = Get-ADUser -Filter {AccountExpirationDate -lt $CurrentDate -and AccountExpirationDate -ne $null} -Properties AccountExpirationDate, DistinguishedName + +if ($ExpiredUsers) { + $Count = 0 + foreach ($User in $ExpiredUsers) { + try { + # Vérification : on ne déplace pas l'utilisateur s'il est déjà dans la bonne OU + if ($User.DistinguishedName -notlike "*$TargetOUDN") { + + # Déplacement de l'objet + Move-ADObject -Identity $User -TargetPath $TargetOUDN -ErrorAction Stop + + Write-Host "Utilisateur déplacé : $($User.Name) (Expiré le $($User.AccountExpirationDate))" -ForegroundColor Yellow + $Count++ + } + else { + Write-Host "Utilisateur $($User.Name) est déjà dans l'OU Retired." -ForegroundColor DarkGray + } + } + catch { + Write-Host "Impossible de déplacer $($User.Name) : $_" -ForegroundColor Red + } + } + + if ($Count -gt 0) { + Write-Host "`nTerminé. $Count utilisateur(s) déplacé(s) vers '$TargetOUName'." -ForegroundColor Green + } else { + Write-Host "`nAucun utilisateur n'avait besoin d'être déplacé." -ForegroundColor Green + } +} +else { + Write-Host "Aucun utilisateur expiré trouvé." -ForegroundColor Gray +}