TP2 - Création de comptes AD en lot
Ce TP est à faire individuellement. Il compte pour 30% de la note du cours et 60% du seuil des travaux en laboratoire.
Il est à remettre au plus tard le 3 novembre 2025.
Préparation
Avant de commencer le TP, vous devez mettre en place les éléments suivants:
- Montez votre environnement de laboratoire (si ce n'est pas déjà fait).
- Si ce n'est pas déjà fait, installez Visual Studio Code System Installer x64 ainsi que l'extension PowerShell (et tout autre extension souhaitée) sur votre machine de développement.
- Authentifiez-vous sur la machine de développement (PCDEV) avec le compte d'admin du domaine (
NOMDEVOTREDOMAINE\Administrateur). - Créez l'unité d'organisation (OU) "Utilisateurs" à la racine de votre domaine. (Vous pouvez le faire graphiquement ou avec la commande
New-ADOrganizationalUnit).
Mandat
Votre compagnie vient de recruter un ensemble musical. Vous devez développer un script PowerShell qui vise à créer ces utilisateurs du domaine en lot. Les utilisateurs à créer sont définis dans un fichier CSV.
Le fichier d’entrée
Le fichier CSV est construit dans le format suivant, séparé par des points-virgules :
"Nom";"Prenom";"Poste";"Admin"
"Asselin";"Benoit";"Bassiste";"Non"
"Gentilcore";"Alexandre";"Agent";"Oui"
"Hanton";"Claudine";"Chanteuse";"Non"
"Ianoni";"Pietro";"Pianiste";"Non"
"Luteau";"Francois";"Flutiste";"Non"
"Rumsfeld";"Dennis";"Batteur";"Non"
On y trouve le nom, le prénom et le poste de chaque utilisateur à créer, ainsi qu’un champ identifiant si l’utilisateur doit être administrateur du domaine (oui ou non).
Comptes utilisateurs
Votre script devra créer un compte de domaine pour chaque utilisateur spécifié dans ce fichier. Voici les consignes :
-
Le nom d’utilisateur doit être la première lettre du prénom et les 4 premières du nom de famille, en lettres minuscules. Les attributs Name, sAMAccountName et UserPrincipalName doivent tous trois porter ce nom.
-
Le prénom et le nom de l'utilisateur correspond au fichier d'entrée.
-
Le nom complet de l’utilisateur est son prénom suivi de son nom.
-
La description de l’utilisateur correspond à son poste.
-
Le mot de passe doit être constitué des 2 premières lettres du nom de famille en majuscules, des 2 premières lettres du prénom en minuscules, suivi d'un nombre aléatoire de 4 chiffres.
- Vous pouvez utiliser la commande
Get-Randompour obtenir un nombre aléatoire entre 1000 et 9999.
- Vous pouvez utiliser la commande
-
L'utilisateur doit changer son mot de passe à la prochaine ouverture de session.
-
Si l’utilisateur doit être admin, il doit être ajouté automatiquement au groupe des Admins du domaine.
Lancement du script
Le script doit exiger un paramètre -Path obligatoire dans lequel on spécifie le chemin du fichier CSV à charger. Le script doit alors créer les utilisateurs selon les paramètres indiqués dans le fichier.
Pour chaque utilisateur créé, le script doit retourner sur le pipeline un objet de type PSCustomObject avec une propriété "Compte" contenant le nom d'utilisateur et une propriété "MotDePasse" contenant le mot de passe en clair.
PS C:\EspaceLabo> .\Import-ADUsers.ps1 -Path ".\users.csv"
Compte MotDePasse Admin
------ ---------- -----
basse ASbe5678 False
agent GEal1998 True
chant HAcl5155 False
piano IApi4978 False
flute LUfr9922 False
drums RUde7920 False
Le script ne doit pas montrer de message d'erreur. Il ne doit pas non plus envoyer d'autres objets sur le pipeline que ceux mentionnés ci-dessus.
Les comptes ainsi créés devraient être visibles dans la console Utilisateurs et ordinateurs Active Directory.
Validation du paramètre
Le script doit planter si le chemin spécifié en paramètre est invalide. Pour ce faire, vous devez utiliser les fonctionnalités de validation des paramètres de PowerShell.
PS C:\Scripts> .\Import-ADUsers.ps1 -FilePath "C:\fichier_inexistant.csv"
Import-ADUsers.ps1: Cannot validate argument on parameter 'FilePath'. The "Test-
Path $_ -PathType Leaf" validation script for the argument with value "c:\fichie
r_inexistant.csv" did not return a result of True. Determine why the validation
script failed, and then try the command again.
Journalisation
Le script doit aussi garder une trace de toutes les actions qu’il entreprend dans le fichier Import-ADUsers.log :
Chaque ligne doit être horodatée (timestamp) dans le format ISO 8601. Cette fonctionnalité doit être réalisée au moyen d’une fonction, et cette dernière doit comprendre la logique pour produire le timestamp. Par ailleurs, le fichier doit être situé sous C:\Users\nomdutilisateur\AppData\Local\Import-ADUsers.log (celui-ci doit être créé automatiquement s’il n’existe pas). Vous devez utiliser les variables d’environnement offertes par Windows pour déterminer le chemin où le stocker dans le profil de l'utilisateur. N'utilisez pas de chemin hard-codé!
Voici un exemple de fichier Log:
2025-10-02T15:29:35.9082949-04:00 === Début du script ===
2025-10-02T15:29:36.7544988-04:00 Traitement de l'utilisateur Benoit Asselin (Bassiste)
2025-10-02T15:29:37.4283110-04:00 Création de l'utilisateur basse complétée avec le mot de passe ASbe5678
2025-10-02T15:29:38.0432167-04:00 Traitement de l'utilisateur Alexandre Gentilcore (Agent)
2025-10-02T15:29:38.6659834-04:00 Création de l'utilisateur agent complétée avec le mot de passe GEal1998
2025-10-02T15:29:38.9482248-04:00 L'utilisateur agent a été défini comme admin du domaine
2025-10-02T15:29:39.2540231-04:00 Traitement de l'utilisateur Claudine Hanton (Chanteuse)
2025-10-02T15:29:39.9575342-04:00 Création de l'utilisateur chant complétée avec le mot de passe HAcl5155
2025-10-02T15:29:41.0217125-04:00 Traitement de l'utilisateur Pietro Ianoni (Pianiste)
2025-10-02T15:29:41.5828334-04:00 Création de l'utilisateur piano complétée avec le mot de passe IApi4978
2025-10-02T15:29:42.1425306-04:00 Traitement de l'utilisateur Francois Luteau (Flutiste)
2025-10-02T15:29:43.1193062-04:00 Création de l'utilisateur flute complétée avec le mot de passe LUfr9922
2025-10-02T15:29:43.6235816-04:00 Traitement de l'utilisateur Dennis Rumsfeld (Batteur)
2025-10-02T15:29:44.3556437-04:00 Création de l'utilisateur drums complétée avec le mot de passe RUde7920
2025-10-02T15:29:45.0895326-04:00 === Fin du script
Consignes de remise
Vous devez remettre ce travail sur Teams dans un fichier Zip appelé: TP2-matricule.zip où "matricule" est remplacé par votre numéro matricule du collège. Dans le zip devrait se trouver votre fichier Import-ADUsers.ps1.
Conseils
Voici quelques conseils qui pourraient vous aider à mener à bien ce travail :
- Commencez votre codage à partir du squelette fourni par le professeur.
- Avant de commencer à coder, décrivez les étapes en pseudo-code pour déterminer la logique générale du script. Vous pourrez ensuite "traduire" ce pseudo-code en PowerShell, étape par étape.
- Ne hard-codez jamais le chemin vers le fichier CSV, utilisez plutôt les paramètres
- Utilisez la variable
$PSScriptRootpour faire référence au répertoire où est situé le script - Utilisez une machine virtuelle pour tester votre script. Vous pouvez installer VS Code sur votre VM pour développer votre script.
- Sur votre VM, démarrez une session en tant qu'administrateur du domaine. Le script ne fonctionnera pas avec un compte local.
- Utilisez le paramètre
-WhatIfpour tester votre script sans qu’une action réelle ne soit posée. - Faites-vous un petit script de nettoyage pour effacer les utilisateurs créés en trop.
- Utilisez le débogueur!!!
Critères d’évaluation
| Critère | Pondération |
|---|---|
| Fonctionnement général | /5 |
| Traitement des paramètres | /5 |
| Création des utilisateurs | /10 |
| Journalisation | /5 |
| Style et lisibilité | /3 |
| Respect des consignes de remise | /2 |
| Total | /30 |
Voici plus en détails les éléments qui seront évalués:
Fonctionnement général (5 points)
- Le script fonctionne du premier coup et aucune erreur n'est affichée pendant l'exécution
- Les objets demandés sont envoyés sur le pipeline (sous forme de
PSCustomObject) - La structure des objets en sortie correspond à l'énoncé
- Aucun autre objet n'est envoyé sur le pipeline à la sortie du script
- Aucun chemin n'est hard-codé
Traitement des paramètres (5 points)
- Le paramètre est déclaré correctement dans un bloc Param()
- Le paramètre a le bon nom et le bon type
- Le paramètre est obligatoire
- Le paramètre valide correctement l'existence du fichier
- Le fichier CSV accédé par le script est celui qui a été passé en paramètre
Création des utilisateurs (10 points)
- Le fichier CSV est correctement importé en utilisant la commande appropriée
- Les comptes utilisateurs sont créés au bon endroit dans l'arborescence
- Le nom d'utilisateur est correctement construit
- Le mot de passe est correctement construit
- Les deux noms d'utilisateurs (sAMAccountName et UserPrincipalName) sont affectés
- Les comptes créés ont leurs attributs Nom, Prénom et Description correctement affectés
- L'option "L'utilisateur devra changer le mot de passe" est activée
- Les utilisateurs sont ajoutés au groupe des Admins du domaine lorsque spécifié dans le fichier
Journalisation (5 points)
- Le script effectue sa journalisation à l'aide d'une fonction
- La fonction de log permet de spécifier le message en paramètre
- La fonction de log est responsable de créer le fichier
- La fonction de log est responsable de construire le timestamp
- Le timestamp est construit avec le format demandé
- Les entrée du log sont écrites dans le format demandé
- Toutes les entrées demandées sont présentes dans le fichier log
- Le fichier log est stocké à l'emplacement demandé du profil de l'utilisateur
- Le chemin est construit à l'aide d'une variable d'environnement
Style et lisibilité (3 points)
- Pas d'alias ni de paramètres positionnels dans l'utilisation des commandes
- Choix judicieux des noms de variables et de fonctions
- Utilisation judicieuse des commentaires
- Propreté générale du code (indentation, etc.)
- Utilisation du splatting avec la commande de création de compte AD
Respect des consignes (2 points)
- Remise par Teams tel que demandé
- Le nom du script est
Import-ADUsers.ps1 - Le fichier zip est nommé
TP2-matricule.zipoù "matricule" est votre numéro matricule à 7 chiffres - Les commentaires demandés en en-tête ont été correctement remplis (nom et prénom)