15/11/2024

Créer des utilisateurs dans l’AD à partir d’un CSV

I. Présentation

La commande New-ADUser étant désormais maîtrisée puisque nous l’avons bien manipulée au sein du chapitre précédent, il est temps d’en tirer profit et de coupler l’utilisation de cette commande avec un fichier CSV.

L’objectif de ce chapitre, c’est de créer un ensemble d’utilisateurs dans l’Active Directory à partir de données récupérées dans un fichier CSV. Ainsi, que l’on ait 1 utilisateur, 10 ou 100, le script PowerShell va s’occuper de créer les utilisateurs à notre place, de quoi gagner un temps précieux.

Au-delà du plaisir de réaliser cette action en ligne de commande, il y a un véritable intérêt : créer les utilisateurs de la même façon, sans se tromper, sans oublier de remplir un champ. Le script, contrairement à l'humain, ne fera pas ce genre d'oubli. En tout cas, si une erreur survient c'est que le code doit être amélioré, probablement pour gérer un cas particulier.

Je souhaite vous montrer une méthode simple sans vous noyer dans les lignes de code, il conviendra de faire évoluer ce que l’on voit ensemble avec vos besoins propres et au fur et à mesure de votre montée en compétence en PowerShell. Cela reste du scripting alors il y a mille et une façons de faire…

Ce chapitre est disponible au format vidéo :

II. Le fichier CSV avec les utilisateurs

Dans la pratique, en entreprise, le fichier CSV récupéré sera probablement issu d’une base de données, d’un ERP par exemple, et l’on vous demandera de créer les comptes à partir de cet export. Les colonnes contenues dans ce fichier seront variées, et potentiellement il y aura des colonnes inutiles pour la création des comptes dans l’AD, mais ce n’est pas gênant.

Prenons pour l’exemple le fichier CSV suivant :

Prenom;Nom;Fonction
Gérard;Mensoif;Directeur
Sophie;Fonfek;Secrétaire
John;Doeuf;Comptable
Juda;Nanas;Secrétaire
Cécile;Ourkessa;Secrétaire

Ce fichier contient simplement trois valeurs : le prénom, le nom et la fonction. À partir de ça, nous allons devoir créer des comptes utilisateurs dans l’AD. L’idée c’est d’injecter ces valeurs dans l’AD dans les bons champs et de créer des identifiants sous la forme : p.nom (première lettre du prénom, suivie du nom, le tout séparé par un point). L’adresse e-mail est à générer également avec le domaine de l’entreprise, en reprenant le login.

III. Importer le fichier CSV dans un script

La première étape, c’est déjà de récupérer dans une variable le contenu de notre fichier CSV afin d’obtenir la collection de données à traiter. Pour réaliser cette opération, le cmdlet Import-CSV doit être utilisé :

$CSVFile = "C:\Scripts\AD_USERS\Utilisateurs.csv"
$CSVData = Import-CSV -Path $CSVFile -Delimiter ";" -Encoding UTF8

Si l’on affiche le contenu de la variable $CSVData, on peut voir que nos données sont bien chargées :

Les données étant chargées dans une variable, nous allons pouvoir réaliser des actions sur ces données :

  • Construire l’identifiant sous la forme p.nom car pour le moment nous avons seulement le prénom et le nom de façon indépendante
  • Créer l’utilisateur dans l’Active Directory

Pour réaliser un traitement sur chaque « ligne » (objet) de notre collection de données, nous allons utiliser une boucle Foreach en PowerShell.

IV. Créer les utilisateurs AD en masse

Pour la création des utilisateurs en masse dans l’Active Directory, nous allons commencer par déclarer la boucle Foreach avant de venir l’alimenter :

Foreach($Utilisateur in $CSVData){

}

Commençons par stocker le prénom et le nom dans deux variables différentes. Il est intéressant dans l’objet AD de chaque utilisateur d’injecter ces deux valeurs.

Foreach($Utilisateur in $CSVData){
    $UtilisateurPrenom = $Utilisateur.Prenom
    $UtilisateurNom = $Utilisateur.Nom
}

Ici, vous remarquerez que pour récupérer la valeur d’une colonne spécifique du fichier CSV, on indique $Utilisateur qui contient l’objet en cours (la ligne en cours de traitement) suivi du nom de la colonne. Pour récupérer le prénom, cela donne : $Utilisateur.Prenom

Maintenant, nous allons construire le login en respectant la convention de nommage : p.nom. Pour récupérer la première lettre du prénom, il suffit d’appliquer la méthode Substring() sur la variable $UtilisateurPrenom.

Sur le même principe, nous pouvons générer l’adresse e-mail avec le domaine de messagerie @it-connect.fr. Ce qui donne :

Foreach($Utilisateur in $CSVData){
    $UtilisateurPrenom = $Utilisateur.Prenom
    $UtilisateurNom = $Utilisateur.Nom
    $UtilisateurLogin = ($UtilisateurPrenom).Substring(0,1) + "." + $UtilisateurNom
    $UtilisateurEmail = "[email protected]"
}

Ce que l’on a oublié de gérer pour le moment, c’est le mot de passe. Disons que l’on va définir le mot de passe « IT-Connect@2020 » à tous les utilisateurs, par défaut. Nous demanderons à ce qu’il soit changé à la première connexion. Nous pourrions tout à fait avoir une variable qui va stocker ce mot de passe, nous allons l’ajouter dans la boucle, ainsi qu’une variable pour stocker la fonction.

Foreach($Utilisateur in $CSVData){

    $UtilisateurPrenom = $Utilisateur.Prenom
    $UtilisateurNom = $Utilisateur.Nom
    $UtilisateurLogin = ($UtilisateurPrenom).Substring(0,1) + "." + $UtilisateurNom
    $UtilisateurEmail = "[email protected]"
    $UtilisateurMotDePasse = "IT-Connect@2020"
    $UtilisateurFonction = $Utilisateur.Fonction
}

 

Maintenant que nous avons formaté les données que nous souhaitons injecter, il ne reste plus qu’à intégrer à la boucle la commande New-ADUser.

Je vais en profiter pour intégrer une condition pour créer l’utilisateur dans l’AD seulement s’il n’existe pas déjà, sinon la commande New-ADUser va retourner une erreur, donc autant le vérifier en amont.

La condition à inclure dans la boucle est la suivante :

# Vérifier la présence de l'utilisateur dans l'AD

if (Get-ADUser -Filter {SamAccountName -eq $UtilisateurLogin})
{
   Write-Warning "L'identifiant $UtilisateurLogin existe déjà dans l'AD"
}
else
{
      # New-ADUser...
}

Au final, le code complet est le suivant :

$CSVFile = "C:\Scripts\AD_USERS\Utilisateurs.csv"
$CSVData = Import-CSV -Path $CSVFile -Delimiter ";" -Encoding UTF8

Foreach($Utilisateur in $CSVData){

    $UtilisateurPrenom = $Utilisateur.Prenom
    $UtilisateurNom = $Utilisateur.Nom
    $UtilisateurLogin = ($UtilisateurPrenom).Substring(0,1) + "." + $UtilisateurNom
    $UtilisateurEmail = "[email protected]"
    $UtilisateurMotDePasse = "IT-Connect@2020"
    $UtilisateurFonction = $Utilisateur.Fonction

    # Vérifier la présence de l'utilisateur dans l'AD
    if (Get-ADUser -Filter {SamAccountName -eq $UtilisateurLogin})
    {
        Write-Warning "L'identifiant $UtilisateurLogin existe déjà dans l'AD"
    }
    else
    {
        New-ADUser -Name "$UtilisateurNom $UtilisateurPrenom" `
                    -DisplayName "$UtilisateurNom $UtilisateurPrenom" `
                    -GivenName $UtilisateurPrenom `
                    -Surname $UtilisateurNom `
                    -SamAccountName $UtilisateurLogin `
                    -UserPrincipalName "[email protected]" `
                    -EmailAddress $UtilisateurEmail `
                    -Title $UtilisateurFonction `
                    -Path "OU=Personnel,DC=IT-CONNECT,DC=LOCAL" `
                    -AccountPassword(ConvertTo-SecureString $UtilisateurMotDePasse -AsPlainText -Force) `
                    -ChangePasswordAtLogon $true `
                    -Enabled $true

        Write-Output "Création de l'utilisateur : $UtilisateurLogin ($UtilisateurNom $UtilisateurPrenom)"
    }
}

Pour la commande New-ADUser, j’ai repris ce que nous avons pu voir dans le chapitre précédent, la différence ici c’est que nous utilisons des variables à la place des valeurs fixes. Les comptes seront tous  créés dans la même unité d’organisation au niveau de l’Active Directory, à savoir « OU=Personnel,DC=IT-CONNECT,DC=LOCAL ». Pour rendre cela dynamique, nous pouvons ajouter une colonne dans le CSV et ajouter l’OU cible pour chaque compte, ou ajouter une condition pour affecter une OU selon la fonction de l’utilisateur.

L’exécution de ce script va créer les utilisateurs dans l’annuaire Active Directory :

New-ADUser CSV

Nous pouvons également collecter les données de ces nouveaux utilisateurs via PowerShell :

Get-ADUser  -Filter * -SearchBase "OU=Personnel,DC=IT-CONNECT,DC=LOCAL" `
            -Properties Name,GivenName,Surname,EmailAddress,Title  | `
            Select-Object Name,GivenName,Surname,EmailAddress,Title | Ft

On obtient en retour un joli tableau et on peut vérifier que les comptes sont bien conformes :

Félicitations ! Vous venez de créer des comptes utilisateurs dans l’Active Directory à partir d’un fichier CSV. J’ai pris le temps d’expliquer les étapes une à une, afin d’avoir une certaine progression dans la construction du script, pour que ce soit clair et plus facile à suivre.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail