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 :

  1. Vérifie que l’utilisateur n’existe pas déjà (par identifiant matricule)
  2. Génère un mot de passe temporaire selon une politique random + complexité forte
  3. Crée le compte avec New-ADUser, OU calculée à partir du service
  4. Ajoute aux groupes via une table de mapping service+fonction → [groupes]
  5. Génère une fiche d’accueil PDF avec le mot de passe (à remettre en main propre)
  6. 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.