Windows Server

PowerShell — Créer des utilisateurs AD en masse

Automatiser la création de dizaines d'utilisateurs Active Directory à partir d'un fichier CSV avec PowerShell.

← Retour aux tutoriels Windows
📚 Pourquoi automatiser avec PowerShell ? Créer des utilisateurs Active Directory un par un via l'interface graphique, c'est faisable pour 5 utilisateurs. Mais quand vous devez en créer 50, 100 ou 500 (rentrée scolaire, nouvelle entreprise...), c'est impossible manuellement. PowerShell permet de lire un fichier CSV (un tableau) et de créer automatiquement tous les comptes en quelques secondes. Chaque utilisateur recevra son nom, login, mot de passe et sera placé dans la bonne unité organisationnelle (OU).
ⓘ Prérequis Un domaine Active Directory fonctionnel (ex. : labo.local). Le module ActiveDirectory PowerShell doit être installé (inclus avec RSAT ou le rôle AD DS).

Préparer le fichier CSV

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
✔ Astuce Vous pouvez créer ce CSV depuis Excel : remplissez vos colonnes puis Enregistrer sous → CSV (séparateur : virgule).

Vérifier que les OU existent

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

Écrire le script d'import

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

Exécuter le script

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.

⚠ Attention Si vous obtenez une erreur Path not found, vérifiez que l'OU dans le CSV est correctement écrite (sensible à la casse du DN).

Vérifier les utilisateurs créés

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

Vérification dans ADUC

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.

Bonus : ajouter les utilisateurs à un groupe

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
}
✔ Alternative rapide Si tous les utilisateurs sont dans la même OU :
Get-ADUser -Filter * -SearchBase "OU=IT,DC=labo,DC=local" |
    ForEach-Object { Add-ADGroupMember -Identity "VPN_Users" -Members $_ }
✔ Résultat Tous les utilisateurs du CSV sont créés dans Active Directory avec les bons attributs, placés dans les bonnes OU et activés. Le script est réutilisable pour chaque nouvelle vague de comptes.