From e8fde7102f48cb2552a0fbf2a61f90fdaa9caffd Mon Sep 17 00:00:00 2001 From: 7ka1 <7ka1@noreply.localhost> Date: Thu, 20 Nov 2025 15:25:54 +0000 Subject: [PATCH] =?UTF-8?q?T=C3=A9l=C3=A9verser=20les=20fichiers=20vers=20?= =?UTF-8?q?"/"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- move_expired_users.ps1 | 77 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 move_expired_users.ps1 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 +}