Étude de cas : Gestion automatisée des comptes utilisateurs AD
Scénario
Vous êtes administrateur système pour une entreprise ayant récemment embauché quelques nouveaux employés. Le département des ressources humaines (RH) vous a transmis une liste CSV contenant les détails des nouveaux utilisateurs (nom, prénom, nom d'utilisateur, etc.) ainsi que des groupes auxquels ils doivent appartenir.
Votre objectif est d’automatiser la création de ces comptes dans Active Directory, tout en assurant la sécurité initiale en forçant chaque nouvel utilisateur à changer son mot de passe à la première connexion.
Vous disposez des droits d'administrateur de domaine et vous allez utiliser PowerShell avec les modules Active Directory pour accomplir cette tâche. Pour ce faire, vous allez utiliser les deux machines virtuelles configurées précédemment : DC-01 (le contrôleur de domaine) et CLIENT-01 (la machine cliente). La machine cliente agira comme point de départ pour exécuter les commandes PowerShell à distance sur le contrôleur de domaine.
Objectifs pédagogiques
- Maîtriser l’administration distante via PowerShell (
New-PSSession,Invoke-Command, etc.) - Manipuler les comptes utilisateurs AD (
New-ADUser,Set-ADAccountPassword,Set-ADUser) - Utiliser l'importation de données CSV avec PowerShell (
Import-Csv)
Environnement
- Une machine Windows Server 2019/2022 avec le rôle Active Directory installé (que nous appellerons
DC-01). - Une machine cliente Windows 10/11 ou Server 2022/2025 faisant partie du domaine (que nous appellerons
CLIENT-01). - Un compte administrateur de domaine avec les droits nécessaires pour créer des utilisateurs dans AD.
Mise en place
Prérequis
Assurez-vous d'avoir configuré vos deux machines virtuelles comme indiqué dans les instructions suivantes: Mise en place.
Allumez vos machines virtuelles et connectez-vous.
Activer le remoting PowerShell
Sur le contrôleur de domaine DC-01, activez le remoting PowerShell si ce n'est pas déjà fait :
Enable-PSRemoting -Force
Sur la machine cliente CLIENT-01, assurez-vous que vous pouvez établir une session distante vers DC-01 :
Enter-PSSession -ComputerName DC-01 -Credential (Get-Credential)
Utilisez les informations d'identification d'un compte administrateur de domaine.
Si tout fonctionne correctement, vous pouvez quitter la session distante avec :
Exit-PSSession
Création des fichiers CSV
Créez un fichier CSV nommé utilisateurs.csv sur le bureau de CLIENT-01 avec le contenu suivant :
prenom,nom,username
Alice,Dupont,adupont
Bob,Martin,bmartin
Charlie,Durand,cdurand
David,Leroy,dleroy
Eve,Moreau,emoreau
Ce fichier contient les informations nécessaires pour créer les comptes utilisateurs.
Ensuite, créez un fichier JSON nommé groupes.json avec le contenu suivant :
{
"groupes": [
{
"nom": "Marketing",
"membres": [
"adupont",
"bmartin"
]
},
{
"nom": "Stagiaires",
"membres": [
"cdurand",
"dleroy",
"emoreau"
]
}
]
}
Ce fichier définit les groupes et les membres qui doivent y être ajoutés.
Étapes pour réaliser l'étude de cas
1. Établir une session distante vers le contrôleur AD
Nous allons tout d'abord établir une session distante persistante vers le contrôleur de domaine DC-01.
À partir de CLIENT-01, exécutez la commande suivante pour créer une session distante :
# Établir une session à distance sécurisée vers le contrôleur AD
$Session = New-PSSession -ComputerName DC-01 -Credential (Get-Credential)
Vous serez invité à entrer les informations d'identification d'un compte ayant les droits nécessaires pour créer des utilisateurs dans AD.
Afin de tester que la session a bien été créée, vous pouvez exécuter la commande suivante qui ne fera qu'afficher le nom de l'ordinateur distant :
Invoke-Command -Session $Session -ScriptBlock {
hostname
}
2. Copier les fichiers CSV et JSON sur le contrôleur AD
Afin de pouvoir utiliser les fichiers CSV et JSON sur le contrôleur de domaine, nous allons les copier depuis CLIENT-01 vers DC-01. Utilisez la commande suivante :
Copy-Item -Path "C:\Users\Administrateur\Desktop\utilisateurs.csv" -Destination "C:\Temp\utilisateurs.csv" -ToSession $Session
Copy-Item -Path "C:\Users\Administrateur\Desktop\groupes.json" -Destination "C:\Temp\groupes.json" -ToSession $Session
Vous devrez peut-être modifier les chemins en fonction de l'emplacement exact des fichiers sur votre machine cliente.
Il se peut que le dossier C:\Temp n'existe pas sur DC-01. Si c'est le cas, créez-le avec la commande suivante :
Invoke-Command -Session $Session -ScriptBlock {
New-Item -Path "C:\Temp" -ItemType Directory -Force
}
3. Créer l'unité organisationnelle (OU - Organisation Unit) "Employes" dans Active Directory
Avant de créer les utilisateurs, nous allons créer une unité organisationnelle (OU) nommée "Employes" dans Active Directory pour y placer les nouveaux comptes utilisateurs. Utilisez la commande suivante pour créer l'OU :
Invoke-Command -Session $Session -ScriptBlock {
Import-Module ActiveDirectory
New-ADOrganizationalUnit -Name "Employes" -Path "DC=VOTRE-NOM-5R3,DC=local"
}
Remplacez VOTRE-NOM-5R3 par le nom de votre domaine.
4. Importer les données CSV et créer les comptes utilisateurs
Nous sommes maintenant prêts à importer les données CSV et à créer les comptes utilisateurs dans Active Directory.
Utilisez la commande suivante pour importer les données et créer les utilisateurs :
Invoke-Command -Session $Session -ScriptBlock {
# Importation des données CSV
$utilisateurs = Import-Csv -Path "C:\Temp\utilisateurs.csv"
foreach ($user in $utilisateurs) {
# Définition des paramètres pour le nouvel utilisateur
$PasswordTemporaire = ConvertTo-SecureString "P@sswordInitial1" -AsPlainText -Force
# Création du compte AD
New-ADUser `
-Name "$($user.prenom) $($user.nom)" `
-GivenName $user.prenom `
-Surname $user.nom `
-SamAccountName $user.username `
-UserPrincipalName "$($user.username)@VOTRE-NOM-5R3.local" `
-AccountPassword $PasswordTemporaire `
-Enabled $true `
-Path "OU=Employes,DC=VOTRE-NOM-5R3,DC=local" `
-ChangePasswordAtLogon $true
}
}
Explication de la commande:
Invoke-Command -Session $Session -ScriptBlock { ... }: Exécute le bloc de script sur la machine distante via la session établie.Import-Csv -Path "C:\Temp\utilisateurs.csv": Importe les données du fichier CSV en tant qu'objets PowerShell.- La boucle
foreach ($user in $utilisateurs)itère sur chaque utilisateur importé. $PasswordTemporaire = ConvertTo-SecureString "P@sswordInitial1" -AsPlainText -Force: Définit un mot de passe temporaire pour chaque utilisateur. Le paramètreConvertTo-SecureStringconvertit le mot de passe temporaire en une chaîne sécurisée. Cela est nécessaire carNew-ADUserattend un mot de passe sécurisé.New-ADUser: Crée un nouvel utilisateur dans Active Directory avec les paramètres spécifiés.-Name: Nom complet de l'utilisateur.-GivenName: Prénom de l'utilisateur.-Surname: Nom de famille de l'utilisateur.-SamAccountName: Nom d'ouverture de session (login) de l'utilisateur.-UserPrincipalName: Nom principal de l'utilisateur (utilisé pour la connexion). ChangezVOTRE-NOM-5R3par le nom de votre domaine.-AccountPassword: Mot de passe du compte (doit être une chaîne sécurisée).-Enabled $true: Active le compte utilisateur.-Path "OU=Employes,DC=VOTRE-NOM-5R3,DC=local": Spécifie l'OU (Unité d'Organisation, ou Organisation Unit en anglais) où les utilisateurs seront créés. RemplacezVOTRE-NOM-5R3par le nom de votre domaine.-ChangePasswordAtLogon $true: Force l'utilisateur à changer son mot de passe à la première connexion.
5. Ajouter les utilisateurs aux groupes
Ensuite, nous allons ajouter les utilisateurs aux groupes spécifiés dans le fichier JSON. Utilisez la commande suivante pour importer les données JSON, créer les groupes s'ils n'existent pas, puis ajouter les utilisateurs aux groupes :
Invoke-Command -Session $Session -ScriptBlock {
Import-Module ActiveDirectory
$groupesData = Get-Content -Path "C:\Temp\groupes.json" | ConvertFrom-Json
foreach ($groupe in $groupesData.groupes) {
# Vérifie si le groupe existe, sinon le crée
if (-not (Get-ADGroup -Filter "Name -eq '$($groupe.nom)'" -ErrorAction SilentlyContinue)) {
New-ADGroup -Name $groupe.nom -GroupScope Global -Path "OU=Employes,DC=VOTRE-NOM-5R3,DC=local"
}
foreach ($membre in $groupe.membres) {
Add-ADGroupMember -Identity $groupe.nom -Members $membre
}
}
}
Explication de la commande:
Get-Content -Path "C:\Temp\groupes.json" | ConvertFrom-Json: Lit le contenu du fichier JSON et le convertit en un objet PowerShell.- La première boucle
foreach ($groupe in $groupesData.groupes)itère sur chaque groupe défini dans le fichier JSON. - La seconde boucle
foreach ($membre in $groupe.membres)itère sur chaque membre du groupe. Add-ADGroupMember -Identity $groupe.nom -Members $membre: Ajoute le membre spécifié au groupe AD.
5. Vérifier la création des comptes à distance
Invoke-Command -Session $Session -ScriptBlock {
Get-ADUser -Filter * -SearchBase "OU=Employes,DC=contoso,DC=com" | Select Name, SamAccountName
}
Vous devriez voir la liste des utilisateurs que vous avez créés.
Pour voir les membres d'un groupe spécifique, par exemple "Marketing", utilisez la commande suivante :
Invoke-Command -Session $Session -ScriptBlock {
Get-ADGroupMember -Identity "Marketing" | Select Name, SamAccountName
}
Vous pouvez faire de même avec le groupe "Stagiaires".
6. Exporter un rapport des utilisateurs créés
Afin de communiquer aux RH que les comptes ont été créés avec succès, nous allons exporter un rapport des utilisateurs créés dans un fichier CSV.
Invoke-Command -Session $Session -ScriptBlock {
Get-ADUser -Filter * -SearchBase "OU=Employes,DC=VOTRE-NOM-5R3,DC=local" |
Select Name, SamAccountName, Enabled |
Export-Csv -Path "C:\Temp\rapport_utilisateurs.csv" -NoTypeInformation
}
Explication de la commande:
Get-ADUser -Filter * -SearchBase "OU=Employes,DC=VOTRE-NOM-5R3,DC=local": Récupère tous les utilisateurs dans l'OU spécifié.Select Name, SamAccountName, Enabled: Sélectionne les propriétés à inclure dans le rapport.Export-Csv -Path "C:\Temp\rapport_utilisateurs.csv" -NoTypeInformation: Exporte les données sélectionnées dans un fichier CSV. Le paramètre-NoTypeInformationempêche l'ajout d'une ligne de type en haut du fichier CSV.- Toutes les commandes sont connectées par des pipes (
|), ce qui permet de passer la sortie d'une commande comme entrée à la suivante : Les utilisateurs sont d'abord récupérés, puis leurs propriétés sont sélectionnées, et enfin les données sont exportées dans un fichier CSV.
7. Copier le rapport sur la machine cliente
Pour récupérer le rapport généré sur la machine cliente, utilisez la commande suivante :
Copy-Item -Path "C:\Temp\rapport_utilisateurs.csv" -Destination "C:\Users\Administrateur\Desktop\rapport_utilisateurs.csv" -FromSession $Session
Vous devrez peut-être modifier le chemin de destination en fonction de l'emplacement où vous souhaitez enregistrer le rapport sur votre machine cliente.
8. Fermer la session distante
Une fois les tâches terminées, n'oubliez pas de fermer la session distante pour libérer les ressources :
Remove-PSSession -Session $Session