Automatiser la création de comptes AD avec un fichier RH
Script PowerShell qui lit un CSV du SIRH, crée les comptes AD, applique les groupes par rôle et envoie un rapport HTML à l'équipe RH.
Chaque mois, l’équipe RH me transmet un fichier Excel listant les nouveaux arrivants : nom, prénom, service, fonction, date d’embauche, manager. Pendant longtemps, je créais les comptes à la main. Une dizaine de comptes par mois en moyenne, plus les départs à désactiver, plus les changements de service. Calculé sur l’année : facilement deux journées de boulot répétitif.
J’ai fini par écrire un script qui automatise tout ça. Trois mois plus tard, je n’y reviens que pour ajuster le mapping rôle → groupes quand un nouveau service apparaît.
La logique du script
Le script lit le CSV, et pour chaque ligne :
- Vérifie que l’utilisateur n’existe pas déjà (par identifiant matricule)
- Génère un mot de passe temporaire selon une politique random + complexité forte
- Crée le compte avec
New-ADUser, OU calculée à partir du service - Ajoute aux groupes via une table de mapping
service+fonction → [groupes] - Génère une fiche d’accueil PDF avec le mot de passe (à remettre en main propre)
- Logue dans un CSV de sortie pour l’audit RH
La table de mapping
C’est ce qui m’a pris le plus de temps à bien designer. La première version avait du JSON imbriqué qui devenait illisible dès qu’on dépassait 30 entrées. La version actuelle utilise un fichier CSV simple :
service,fonction,groupes
ServiceA,Operateur,GG-ServiceA-Util;GG-PrintFloor1
ServiceA,Responsable,GG-ServiceA-Util;GG-ServiceA-Admin;GG-PrintFloor1
ServiceB,Technicien,GG-ServiceB-Util;GG-PrintFloor2;GG-AppX-Read
Beaucoup plus facile à maintenir, et l’équipe RH peut même le relire sans formation.
Le rapport HTML envoyé après chaque batch
À la fin du script, un mail est envoyé au manager du service et à RH avec un tableau récapitulatif : qui a été créé, dans quels groupes, avec quel mot de passe initial. Le mail est templated en HTML simple avec inline-CSS pour passer Outlook.
Bilan
Sur l’année passée, environ 130 comptes créés sans intervention manuelle. Le script a échoué deux fois : une fois à cause d’un caractère exotique dans un nom de famille (mauvais encoding du CSV), une fois parce qu’un service avait été renommé sans m’avertir. Les deux cas ont été détectés en moins d’une heure grâce au logging.
Le code est sur mon GitHub sous licence MIT. À adapter à ta nomenclature de groupes évidemment.