From e1ac42ae1f28b4f6d55ccce74a30d3f3397922f4 Mon Sep 17 00:00:00 2001 From: 7ka1 <7ka1@noreply.localhost> Date: Tue, 27 Jan 2026 09:28:02 +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 | 36 +++++++++++++++++ readme.md | 81 ++++++++++++++++++++++++++++++++++++++ update_expiration_date.ps1 | 31 +++++++++++++++ 3 files changed, 148 insertions(+) create mode 100644 move_expired_users.ps1 create mode 100644 readme.md create mode 100644 update_expiration_date.ps1 diff --git a/move_expired_users.ps1 b/move_expired_users.ps1 new file mode 100644 index 0000000..9cbba58 --- /dev/null +++ b/move_expired_users.ps1 @@ -0,0 +1,36 @@ +Import-Module ActiveDirectory + +$domainDN = (Get-ADDomain).DistinguishedName +$retiredOU = "OU=Retired,$domainDN" + +Write-Host "--- Déplacement des comptes expirés ---" -ForegroundColor Cyan + +# 1. Vérification / Création de l'OU +if (-not (Get-ADOrganizationalUnit -Filter "Name -eq 'Retired'")) { + try { + New-ADOrganizationalUnit -Name "Retired" -Path $domainDN -ErrorAction Stop + Write-Host "[OK] OU 'Retired' créée." -ForegroundColor Green + } catch { + Write-Host "[ERREUR] Droit refusé pour créer l'OU. Utilisez 'Exécuter en tant qu'administrateur'." -ForegroundColor Red + return + } +} + +# 2. Recherche des utilisateurs expirés +$today = Get-Date +# Note : on utilise des guillemets simples ' ' pour le filtre AD +$expiredUsers = Get-ADUser -Filter 'AccountExpirationDate -lt $today' -Properties AccountExpirationDate + +if ($expiredUsers) { + Write-Host "$($expiredUsers.Count) utilisateur(s) trouvé(s)." -ForegroundColor White + foreach ($user in $expiredUsers) { + try { + Move-ADObject -Identity $user.DistinguishedName -TargetPath $retiredOU -ErrorAction Stop + Write-Host "[MOVE] $($user.SamAccountName) déplacé vers Retired." -ForegroundColor Yellow + } catch { + Write-Host "[ERREUR] Impossible de déplacer $($user.SamAccountName) : $($_.Exception.Message)" -ForegroundColor Red + } + } +} else { + Write-Host "Aucun utilisateur expiré trouvé." -ForegroundColor Gray +} \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..a509152 --- /dev/null +++ b/readme.md @@ -0,0 +1,81 @@ +# 📘 Documentation Technique - Automatisation Active Directory +**Projet :** Gestion des collaborateurs (Module 122 - Projet 01) +**Date :** 22 Janvier 2026 +**Auteur :** David +**Version :** 1.0 + +--- + +## 📋 Présentation +Ce document détaille la procédure d'utilisation des scripts PowerShell développés pour l'automatisation de la gestion des utilisateurs du domaine `epsicschool.local`. Ces scripts permettent de créer l'architecture, d'importer les utilisateurs, de gérer les départs et d'assurer les sauvegardes. + +## âš™ï¸ Prérequis +Avant d'exécuter les scripts, assurez-vous de respecter les points suivants : +1. **Privilèges :** Tous les scripts doivent être exécutés dans une console PowerShell en tant qu'**Administrateur**. +2. **Source de données :** Le fichier `happy_koalas_employees.csv` doit être présent dans le même dossier que les scripts. +3. **Politique d'exécution :** Si les scripts sont bloqués, exécutez la commande suivante : + ```powershell + Set-ExecutionPolicy Unrestricted -Scope Process + ``` + +--- + +## ðŸ› ï¸ Description des Scripts + +### 1. Structure Organisationnelle (`insert_OUs.ps1`) +**But :** Créer l'arborescence des départements dans l'Active Directory. +* **Fonctionnement :** Lit la colonne "Department" du fichier CSV et crée une Unité d'Organisation (OU) pour chaque département unique à la racine du domaine. +* **Gestion d'erreur :** Si l'OU existe déjà, le script l'ignore et continue. + +### 2. Sécurité des Comptes (`generate_passwords.ps1`) +**But :** Générer des mots de passe forts avant la création des comptes. +* **Fonctionnement :** Ajoute une colonne "Password" dans le fichier CSV source. +* **Complexité :** 8 caractères minimum, incluant Majuscules, Minuscules, Chiffres et Caractères spéciaux. + +### 3. Importation des Utilisateurs (`insert_users.ps1`) +**But :** Créer massivement les comptes utilisateurs. +* **Logique de nommage :** Première lettre du prénom + point + Nom (ex: `p.nom`). +* **Paramètres appliqués :** + * L'utilisateur est placé dans l'OU de son département. + * L'utilisateur doit changer son mot de passe à la première connexion. + * Le compte est activé immédiatement. + +### 4. Gestion des Licenciements (`update_expiration_date.ps1`) +**But :** Appliquer la politique de départ pour le département Production. +* **Cible :** Utilisateurs du département "Production" avec le titre "Assembler". +* **Action :** Définit la date d'expiration du compte à J-1 (Hier), rendant le compte inopérant immédiatement. + +### 5. Archivage (`move_expired_users.ps1`) +**But :** Maintenir l'Active Directory propre en archivant les anciens comptes. +* **Fonctionnement :** + 1. Vérifie si l'OU `Retired` existe (la crée sinon). + 2. Recherche tous les utilisateurs dont la date d'expiration est dépassée. + 3. Déplace ces utilisateurs vers l'OU `Retired`. + +### 6. Sauvegarde (`backup_users.ps1`) +**But :** Assurer la pérennité des données (Backup & Recovery). +* **Action Immédiate :** Exporte les utilisateurs présents dans les OU vers un fichier CSV, puis le compresse en ZIP dans le dossier `C:\backups\`. +* **Automatisation :** Crée une tâche planifiée Windows nommée "BackupUsersDaily" qui exécutera ce script automatiquement **chaque jour à 23h00**. + +--- + +## 🚀 Guide de Démarrage Rapide (Workflow) + +Pour une mise en place complète (ex: nouveau serveur), exécutez les scripts dans cet ordre précis : + +1. `.\insert_OUs.ps1` (Structure) +2. `.\generate_passwords.ps1` (Données) +3. `.\insert_users.ps1` (Comptes) +4. `.\update_expiration_date.ps1` (Mise à jour statut) +5. `.\move_expired_users.ps1` (Nettoyage) +6. `.\backup_users.ps1` (Sécurisation) + +--- + +## â“ Dépannage + +| Erreur rencontrée | Solution | +| :--- | :--- | +| **Accès refusé / UnauthorizedAccess** | Vérifiez que vous avez bien fait "Clic-droit > Exécuter en tant qu'administrateur" sur PowerShell. | +| **Fichier introuvable** | Vérifiez que le fichier CSV est bien dans le même dossier que le script. | +| **Execution Policy...** | Tapez `Set-ExecutionPolicy Bypass` avant de lancer le script. | diff --git a/update_expiration_date.ps1 b/update_expiration_date.ps1 new file mode 100644 index 0000000..9e00c40 --- /dev/null +++ b/update_expiration_date.ps1 @@ -0,0 +1,31 @@ +Import-Module ActiveDirectory + +# 1. Définir la date d'expiration à HIER (expiration immédiate) +$yesterday = (Get-Date).AddDays(-1) + +Write-Host "--- Mise à jour Expiration : Licenciement Production/Assembler ---" -ForegroundColor Red +Write-Host "Date d'expiration fixée au : $($yesterday.ToShortDateString())" -ForegroundColor Gray + +# 2. Cibler le Département Production et le Titre Assembler +$dept = "Production" +$job = "Assembler" + +# Note : J'inclus 'Description' dans le filtre par sécurité au cas où le champ 'Title' serait vide +$users = Get-ADUser -Filter "Department -eq '$dept' -and (Title -eq '$job' -or Description -eq '$job')" -Properties Department, Title, Description + +if ($users) { + Write-Host "$($users.Count) employés identifiés pour le départ." -ForegroundColor White + + foreach ($u in $users) { + try { + # Application de la nouvelle date + Set-ADAccountExpiration -Identity $u.SamAccountName -DateTime $yesterday -ErrorAction Stop + + Write-Host "[EXPIRÉ] Compte désactivé pour : $($u.Name)" -ForegroundColor Yellow + } catch { + Write-Host "[ERREUR] Échec sur $($u.Name) : $($_.Exception.Message)" -ForegroundColor DarkRed + } + } +} else { + Write-Host "Aucun utilisateur correspondant trouvé ($dept - $job)." -ForegroundColor Green +} \ No newline at end of file