Présentation
La commande New-ADUser étant désormais maîtrisée puisque nous l’avons bien manipulée au cours du chapitre précédent, il est temps d’en tirer profit et de l’utiliser conjointement avec un fichier CSV.
L’objectif de ce chapitre est de créer un groupe d’utilisateurs dans l’Active Directory à partir des données récupérées dans un fichier CSV. Qu’il s’agisse d’un utilisateur, de dix ou même de cent, le script PowerShell s’occupera de créer les utilisateurs à notre place, nous permettant de 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 manière, sans se tromper et sans oublier de remplir un champ. Contrairement à l’humain, le script ne commettra pas ce genre d’erreur. En tout cas, si une erreur survient, cela signifie que le code doit être amélioré, probablement pour gérer un cas particulier.
Je souhaite vous présenter une méthode simple sans vous noyer dans les lignes de code. Il conviendra de faire évoluer ce que nous voyons ensemble en fonction de vos propres besoins et de votre montée en compétence en PowerShell. Après tout, il existe mille et une façons de faire du scripting…
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, par exemple d’un ERP, et vous serez chargé de créer les comptes à partir de cette exportation. Les colonnes contenues dans ce fichier seront variées et certaines peuvent être inutiles pour la création des comptes dans l’AD, mais cela n’a pas d’importance.
Prenons, par 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 cela, nous devons créer des comptes utilisateurs dans l’AD. L’idée 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, séparées par un point). L’adresse e-mail doit également être générée avec le domaine de l’entreprise, en reprenant le login.
Importer le fichier CSV dans un script
La première étape consiste à récupérer le contenu de notre fichier CSV dans une variable afin d’obtenir la collection de données à traiter. Pour ce faire, nous utilisons la commande Import-CSV :
$CSVFile = "C:ScriptsAD_USERSUtilisateurs.csv"
$CSVData = Import-CSV -Path $CSVFile -Delimiter ";" -Encoding UTF8
Si nous affichons le contenu de la variable $CSVData, nous pouvons constater que nos données sont bien chargées :
Maintenant que les données sont chargées dans une variable, nous pouvons effectuer des actions sur ces données. Pour chaque ligne de notre collection de données, nous allons construire l’identifiant sous la forme p.nom et créer l’utilisateur dans l’Active Directory.
Créer les utilisateurs AD en masse
Pour la création en masse des utilisateurs dans l’Active Directory, nous commençons par déclarer la boucle Foreach avant de l’alimenter :
Foreach($Utilisateur in $CSVData){
# Actions à réaliser pour chaque utilisateur
}
Commençons par stocker le prénom et le nom dans deux variables distinctes. Dans l’objet AD de chaque utilisateur, il est intéressant d’injecter ces deux valeurs :
Foreach($Utilisateur in $CSVData){
$UtilisateurPrenom = $Utilisateur.Prenom
$UtilisateurNom = $Utilisateur.Nom
}
Ici, nous utilisons la notation $Utilisateur.Nom pour récupérer la valeur de la colonne spécifique du fichier CSV. Maintenant, nous allons construire le login en respectant la convention de nommage : p.nom. Pour cela, nous récupérons la première lettre du prénom en utilisant la méthode Substring() sur la variable $UtilisateurPrenom.
Nous pouvons également générer l’adresse e-mail avec le domaine de messagerie @it-connect.fr. Voici le code correspondant :
Foreach($Utilisateur in $CSVData){
$UtilisateurPrenom = $Utilisateur.Prenom
$UtilisateurNom = $Utilisateur.Nom
$UtilisateurLogin = ($UtilisateurPrenom).Substring(0,1) + "." + $UtilisateurNom
$UtilisateurEmail = "$UtilisateurLogin@it-connect.fr"
}
Nous avons oublié de gérer le mot de passe jusqu’à présent. Disons que nous allons définir le mot de passe “IT-Connect@2020” pour tous les utilisateurs par défaut. Nous demanderons aux utilisateurs de le changer lors de leur première connexion. Nous pouvons stocker ce mot de passe dans une variable et l’ajouter à 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 = "$UtilisateurLogin@it-connect.fr"
$UtilisateurMotDePasse = "IT-Connect@2020"
$UtilisateurFonction = $Utilisateur.Fonction
}
Maintenant que nous avons formaté les données que nous souhaitons injecter, il ne nous reste plus qu’à intégrer la commande New-ADUser à la boucle. Nous en profitons également pour ajouter une condition afin de créer l’utilisateur dans l’AD uniquement s’il n’existe pas déjà. Dans le cas contraire, la commande New-ADUser retournera une erreur.
Voici la condition à inclure dans la boucle :
# 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...
}
Le code complet se présente ainsi :
$CSVFile = "C:ScriptsAD_USERSUtilisateurs.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 = "$UtilisateurLogin@it-connect.fr"
$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 "$UtilisateurLogin@it-connect.fr" `
-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 vu dans le chapitre précédent. La différence ici réside dans l’utilisation de variables à la place des valeurs fixes. Les comptes seront tous créés dans la même unité d’organisation au sein de l’Active Directory : “OU=Personnel,DC=IT-CONNECT,DC=LOCAL”. Pour rendre cela dynamique, nous pouvons ajouter une colonne dans le CSV et inclure l’OU cible pour chaque compte, ou ajouter une condition pour attribuer une OU en fonction de la fonction de l’utilisateur.
L’exécution de ce script permettra de créer les utilisateurs dans l’annuaire Active Directory :
Vous pouvez é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 | Format-Table
Vous obtiendrez un joli tableau en retour, où vous pourrez 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 de faciliter la compréhension et de rendre le script clair.