Automatiser la création de dizaines d'utilisateurs Active Directory à partir d'un fichier CSV avec PowerShell.
labo.local). Le module ActiveDirectory PowerShell doit être installé (inclus avec RSAT ou le rôle AD DS).
Créez un fichier C:\Scripts\utilisateurs.csv avec les colonnes suivantes :
# Fichier CSV = un tableau avec des colonnes séparées par des virgules
# Chaque ligne = un utilisateur à créer
# Prenom : le prénom de l'utilisateur
# Nom : son nom de famille
# Login : son identifiant de connexion (SamAccountName)
# MotDePasse : le mot de passe initial
# OU : l'unité organisationnelle où placer le compte dans l'AD
Prenom,Nom,Login,MotDePasse,OU
Jean,Dupont,j.dupont,P@ssw0rd123,OU=Utilisateurs,DC=labo,DC=local
Marie,Martin,m.martin,P@ssw0rd123,OU=Utilisateurs,DC=labo,DC=local
Pierre,Durand,p.durand,P@ssw0rd123,OU=Comptabilite,DC=labo,DC=local
Sophie,Leroy,s.leroy,P@ssw0rd123,OU=RH,DC=labo,DC=local
Lucas,Moreau,l.moreau,P@ssw0rd123,OU=IT,DC=labo,DC=local
Avant d'importer, assurez-vous que les OU cibles existent. Listez les OU :
# Liste toutes les OU (Unités Organisationnelles) existantes dans l'AD
# DistinguishedName : le chemin complet de l'OU (ce qu'on met dans le CSV)
Get-ADOrganizationalUnit -Filter * | Select-Object Name, DistinguishedName
Si une OU n'existe pas, créez-la :
# Crée les OU manquantes dans Active Directory
# -ProtectedFromAccidentalDeletion $true : protège contre les suppressions accidentelles
New-ADOrganizationalUnit -Name "Comptabilite" -Path "DC=labo,DC=local" -ProtectedFromAccidentalDeletion $true
New-ADOrganizationalUnit -Name "RH" -Path "DC=labo,DC=local" -ProtectedFromAccidentalDeletion $true
New-ADOrganizationalUnit -Name "IT" -Path "DC=labo,DC=local" -ProtectedFromAccidentalDeletion $true
Créez le fichier C:\Scripts\Import-ADUsers.ps1 :
# Import-ADUsers.ps1
# Script qui lit un fichier CSV et crée automatiquement les utilisateurs dans l'AD
# Charge le module Active Directory (nécessaire pour les commandes New-ADUser, etc.)
Import-Module ActiveDirectory
# Chemin vers le fichier CSV contenant les utilisateurs
$csvPath = "C:\Scripts\utilisateurs.csv"
# Lit le CSV et stocke chaque ligne dans la variable $users
$users = Import-Csv -Path $csvPath -Delimiter ","
# Boucle : pour chaque utilisateur dans le CSV...
foreach ($user in $users) {
# Construit le nom complet (ex: "Jean Dupont")
$displayName = "$($user.Prenom) $($user.Nom)"
# Construit l'email/UPN (ex: "[email protected]")
$upn = "$($user.Login)@labo.local"
# Convertit le mot de passe en texte en mot de passe sécurisé (obligatoire)
$securePass = ConvertTo-SecureString $user.MotDePasse -AsPlainText -Force
# Vérifie si l'utilisateur existe déjà (pour éviter les doublons)
if (Get-ADUser -Filter "SamAccountName -eq '$($user.Login)'" -ErrorAction SilentlyContinue) {
Write-Warning "L'utilisateur $($user.Login) existe déjà — ignoré."
continue # Passe à l'utilisateur suivant
}
# Crée le compte utilisateur dans Active Directory
New-ADUser `
-SamAccountName $user.Login ` # Login (ex: j.dupont)
-UserPrincipalName $upn ` # UPN (ex: [email protected])
-Name $displayName ` # Nom complet affiché
-GivenName $user.Prenom ` # Prénom
-Surname $user.Nom ` # Nom
-DisplayName $displayName ` # Nom affiché dans l'annuaire
-Path $user.OU ` # OU de destination (depuis le CSV)
-AccountPassword $securePass ` # Mot de passe
-Enabled $true ` # Compte activé immédiatement
-ChangePasswordAtLogon $true # Force le changement de MDP à la 1ère connexion
# Affiche un message de confirmation en vert
Write-Host "Créé : $displayName ($($user.Login))" -ForegroundColor Green
}
Write-Host "`nImportation terminée." -ForegroundColor Cyan
Ouvrez PowerShell en tant qu'administrateur sur le contrôleur de domaine :
# Autorise l'exécution de scripts PowerShell signés ou locaux
# Par défaut, Windows bloque l'exécution de scripts pour des raisons de sécurité
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# Lance le script d'importation
.\C:\Scripts\Import-ADUsers.ps1
Vous verrez s'afficher chaque utilisateur créé en vert.
Path not found, vérifiez que l'OU dans le CSV est correctement écrite (sensible à la casse du DN).
Listez les utilisateurs récemment créés :
# Liste les 10 derniers utilisateurs créés dans l'AD
# -SearchBase : cherche dans tout le domaine
# Sort-Object Created -Descending : les plus récents en premier
# Select-Object -First 10 : n'affiche que les 10 premiers
Get-ADUser -Filter * -SearchBase "DC=labo,DC=local" -Properties DisplayName, Created |
Sort-Object Created -Descending |
Select-Object -First 10 SamAccountName, DisplayName, Created |
Format-Table -AutoSize
Ouvrez Active Directory Users and Computers (dsa.msc) et naviguez dans les OU pour vérifier visuellement que les comptes sont présents et activés.
Pour ajouter tous les utilisateurs importés à un groupe de sécurité :
# Ajoute chaque utilisateur du CSV au groupe de sécurité "VPN_Users"
# Utile pour donner l'accès VPN à tous les nouveaux utilisateurs d'un coup
$users = Import-Csv -Path "C:\Scripts\utilisateurs.csv" -Delimiter ","
foreach ($user in $users) {
# Ajoute l'utilisateur au groupe
Add-ADGroupMember -Identity "VPN_Users" -Members $user.Login
Write-Host "Ajouté $($user.Login) au groupe VPN_Users" -ForegroundColor Yellow
}
Get-ADUser -Filter * -SearchBase "OU=IT,DC=labo,DC=local" |
ForEach-Object { Add-ADGroupMember -Identity "VPN_Users" -Members $_ }