Téléverser les fichiers vers "/"
This commit is contained in:
36
move_expired_users.ps1
Normal file
36
move_expired_users.ps1
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
Import-Module ActiveDirectory
|
||||||
|
|
||||||
|
$domainDN = (Get-ADDomain).DistinguishedName
|
||||||
|
$retiredOU = "OU=Retired,$domainDN"
|
||||||
|
|
||||||
|
Write-Host "--- D<>placement des comptes expir<69>s ---" -ForegroundColor Cyan
|
||||||
|
|
||||||
|
# 1. V<>rification / Cr<43>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<63><72>e." -ForegroundColor Green
|
||||||
|
} catch {
|
||||||
|
Write-Host "[ERREUR] Droit refus<75> pour cr<63>er l'OU. Utilisez 'Ex<45>cuter en tant qu'administrateur'." -ForegroundColor Red
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 2. Recherche des utilisateurs expir<69>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<75>(s)." -ForegroundColor White
|
||||||
|
foreach ($user in $expiredUsers) {
|
||||||
|
try {
|
||||||
|
Move-ADObject -Identity $user.DistinguishedName -TargetPath $retiredOU -ErrorAction Stop
|
||||||
|
Write-Host "[MOVE] $($user.SamAccountName) d<>plac<61> vers Retired." -ForegroundColor Yellow
|
||||||
|
} catch {
|
||||||
|
Write-Host "[ERREUR] Impossible de d<>placer $($user.SamAccountName) : $($_.Exception.Message)" -ForegroundColor Red
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Write-Host "Aucun utilisateur expir<69> trouv<75>." -ForegroundColor Gray
|
||||||
|
}
|
||||||
81
readme.md
Normal file
81
readme.md
Normal file
@@ -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. |
|
||||||
31
update_expiration_date.ps1
Normal file
31
update_expiration_date.ps1
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
Import-Module ActiveDirectory
|
||||||
|
|
||||||
|
# 1. D<>finir la date d'expiration <20> HIER (expiration imm<6D>diate)
|
||||||
|
$yesterday = (Get-Date).AddDays(-1)
|
||||||
|
|
||||||
|
Write-Host "--- Mise <20> jour Expiration : Licenciement Production/Assembler ---" -ForegroundColor Red
|
||||||
|
Write-Host "Date d'expiration fix<69>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<69> 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<6F>s identifi<66>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<49>] Compte d<>sactiv<69> pour : $($u.Name)" -ForegroundColor Yellow
|
||||||
|
} catch {
|
||||||
|
Write-Host "[ERREUR] <20>chec sur $($u.Name) : $($_.Exception.Message)" -ForegroundColor DarkRed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Write-Host "Aucun utilisateur correspondant trouv<75> ($dept - $job)." -ForegroundColor Green
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user