Aller au contenu principal

TP2 - Création d'utilisateurs AD en lot

Ce TP est à faire individuellement. Il compte pour 20% de la note du cours et 40% du seuil des travaux en laboratoire. La remise doit obligatoirement se faire par GitHub Classroom.

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).
  • Authentifiez-vous sur la machine de développement (PCDEV) avec le compte d'admin du domaine (NOMDEVOTREDOMAINE\Administrateur).
  • Installez le logiciel Git sur votre machine de développement.
  • Installez Visual Studio Code System Installer x64 ainsi que l'extension PowerShell (et tout autre extension souhaitée) sur votre machine de développement.
  • Suivez le lien que votre prof vous a donné pour initialisez votre dépôt sur GitHub.
  • Clonez ce dépôt localement sur votre machine de développement avec le client Git de votre choix.
  • Créez l'unité d'organisation (OU) "Utilisateurs" à la racine de votre domaine

Mandat

Vous devez développer un script PowerShell qui vise à créer des 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 :

Prenom;Nom;NoEmpl;Admin
Alice;Robert;10001;Non
Bob;Graton;10002;Non
Caroline;Tremblay;10003;Oui
Claude;Gagnon;10004;Non
Denis;Denis;10005;Non
Patricia;Larose;10006;Non
Gertrude;Ladouceur;10007;Non
Claude;Tremblay;10100;Non
Cyrille;Tremblay;10101;Oui
Henri;Pavoine;10006;Non
Paul;Meilleur;10009;Oui
Pierre;Laroche;10010;Non
Agnès;Toutant;10011;Non

On y trouve le prénom, le nom, le poste et le numéro d’employé de chaque utilisateur à créer, ainsi qu’un champ identifiant si l’utilisateur doit être administrateur du système (oui ou non).

info

Notez que je n’exige pas que votre script fonctionne pour les utilisateurs dont le nom de famille est inférieur à 4 lettres. Dans mon fichier de correction, tous les utilisateurs ont un nom de famille d’au moins 4 lettres.

Comptes utilisateurs

Votre script devra créer un compte sur Active Directory pour chaque utilisateur spécifié dans ce fichier. Voici les consignes :

  • Les utilisateurs doivent obligatoirement être créés dans l'unité d'organisation Utilisateurs située à la racine du domaine. Utilisez la propriété DefaultNamingContext de l'objet retourné par Get-ADRootDSE pour déterminer dynamiquement le suffixe du nom distinctif.

  • 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. (Dans ce travail, il n’y aura pas de noms de famille de moins de 4 caractères). 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 est son numéro d'employé..

  • Le mot de passe doit être les 2 premières lettres du nom de famille en majuscules, les 2 premières lettres du prénom en minuscules, suivi du numéro d’employé.

  • L'utilisateur doit changer son mot de passe à la prochaine ouverture de session.

  • Si l’utilisateur doit être admin, il doit être ajouté au groupe des Admins du domaine.

Si on devait créer les utilisateurs manuellement, voici à quoi ils ressembleraient dans l'interface graphique:

Infos de l'utilisateur

Gestion des conflits de nom

Lors du traitement des utilisateurs, il se peut qu’il y ait plusieurs utilisateurs qui portent des noms semblables, qui auraient des noms d’utilisateurs identiques. Programmez la logique nécessaire dans votre script pour que si un nom d’utilisateur doit être identique à un existant, il doit être suivi d’un 1, puis d'un 2, puis d’un 3, et ainsi de suite, comme illustré ci-dessous.

Conflits de noms

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. Le script ne doit rien retourner sur le pipeline et ne doit pas montrer de message d'erreur.

Le paramètre -Path doit aussi pouvoir accepter une valeur à l'entrée du pipeline.

Lancement du script

Les comptes ainsi créés devraient être visibles dans la console Utilisateurs et ordinateurs Active Directory.

Résultat dans la console graphique

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.

Exemple de paramètre non valide

Journalisation

Le script doit aussi garder une trace de toutes les actions qu’il entreprend dans le fichier Import-ADUsers.log :

  • Début du script
  • Traitement d’un utilisateur
  • Création de l’utilisateur
  • Ajout au groupe d'administration si nécessaire
  • Fin du script

Chaque ligne doit être horodatée (timestamp) dans le format illustré, avec une précision en millisecondes. Cette fonctionnalité doit être réalisée au moyen d’une fonction, et cette dernière doit avoir un maximum d’autonomie. Par ailleurs, le fichier doit être situé sous C:\Users\utilisateur\AppData\Local\Temp\Import-ADUsers\ (celui-ci doit être créé automatiquement s’il n’existe pas). Vous devez utiliser au maximum les variables d’environnement offertes par Windows. La logique de création automatique de répertoire devrait se trouver dans la fonction de journalisation.

Exemple de fichier log

Consignes de remise

Vous devez remettre ce travail sur GitHub. Vous êtes libres d’utiliser le client Git de votre choix (VS Code, GitKraken, GitHub Desktop, SourceTree, git cli, etc.) ou même simplement télécharger vos fichiers par l'interface Web.

Conseils

Voici quelques conseils qui pourraient vous aider à mener à bien ce travail :

  • Commencez votre codage à partir du squelette fourni dans ce dépôt
  • 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
  • N'utilisez pas les variables globales dans votre fonction, utilisez plutôt les paramètres pour lui passer un intrant
  • Commencez par utiliser le fichier users_simple.csv car celui-ci est plus simple et ne contient pas de doublons.
  • Utilisez la variable PSScriptRoot pour 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 -WhatIf pour 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 GitHub à votre avantage. Dès que vous avez réussi quelque chose dans votre script, faites un commit et un push dans GitHub. Vous pourrez ainsi profiter de l’historique.
  • Testez des parties de votre script au lieu de lancer le script au complet à chaque fois. N’hésitez pas à tester les commandes toutes seules, définir des variables manuellement pour tester, etc.
  • Faites des commits/push régulièrement. C'est une bonne méthode de travail et ça vous évite de perdre du code.
  • N'attendez pas à la dernière minute pour commencer votre travail!!!

Critères d’évaluation

Le script sera évalué selon les critères suivants :

Critère d'évaluationPondération
Conception et fonctionnement général2 points
Paramètres du script2 points
Traitement du fichier d’entrée1 point
Création des utilisateurs4 points
Traitement des conflits de nom4 points
Journalisation2 points
Lisibilité et documentation2 points
Respect des consignes de remise1 point
Français écrit2 points
Total20 points

Voici les détails de ce qui sera évalué pour chaque critère:

  • Conception et fonctionnement général (2 points)
    • Le script fonctionne du premier coup
    • Aucune erreur n’est affichée pendant l’exécution
    • Logique générale du script (pas de code inutile ou redondant)
    • Respect des bonnes pratiques de programmation
  • Paramètres du script (2 points)
    • Définition des paramètres conformes à l’énoncé
    • Paramètre obligatoire
    • Validation de l’existence du fichier en entrée
    • Traitement du paramètre par l’entrée du pipeline
  • Traitement du fichier d’entrée (1 point)
    • Lecture juste du fichier CSV en entrée
    • Utilisation des commandes et paramètres appropriés
  • Création des utilisateurs (4 points)
    • Création correcte des comptes utilisateurs locaux
    • Les attributs sont conformes à l'énoncé
    • Utilisation adéquates des commandes
    • Ajout des comptes admin au groupe des administrateurs du domaine
  • Traitement des conflits de noms (4 points)
    • Les conflits de noms sont résolus conformément à l'énoncé
  • Journalisation (2 points)
    • Écriture des étapes d’exécution dans un fichier log
    • Emploi d’une fonction de journalisation
    • Autonomie de la fonction
    • Emplacement du fichier log conforme à la demande
    • Utilisation adéquate des variables d’environnement
  • Lisibilité et documentation (2 points)
    • Choix judicieux des noms de variables et de fonctions
    • Utilisation judicieuse des commentaires
    • Indentation correcte
    • Propreté du code
  • Respect des consignes (1 point)
    • Remise du script sur GitHub tel que demandé
    • Nom du script et des paramètres tel que demandé
  • Français écrit (2 points)
    • L’évaluation du français porte sur les commentaires et la description des commit dans GitHub
    • Voir la grille d’évaluation du français écrit, dans le plan de cours