Automagically Scaffold Your Powershell Module Thumbnail

Échafaudez un module PowerShell automagiquement

Publié le novembre 22, 2018 par Patrick.lavallee Blogue Patrick Lavallée

Être paresseux

Récemment, j’ai parlé de mes découvertes en termes de fabrication d’outils PowerShell et j’ai réalisé que la plupart du temps, je réécris toujours et encore le même code. Je ne sais pas pour vous mais pour ma part, il est fastidieux d’écrire ou de copier-coller les mêmes instructions. C’est une source d’erreur et je me sens quasiment en retenue à écrire la même phrase au tableau.

Lazy Or Effective

Pendant mon premier cours de programmation au Collège Lionel-Groulx, Sainte-Thérèse, Canada (circa 2001), mon professeur de C++, Vincent Échelard, a prononcé ces mots qui résonnent dans mon esprit à ce jour : « Messieurs, un bon programmeur est un programmeur paresseux ». La signification derrière cet adage est de ne pas reprogrammer ce qui a déjà été écrit. Réutiliser vos choses, vous sauverez du temps et éviterez des erreurs en cours de route.

Parlons de générateur de code

Étant un programmeur paresseux, j’adore les possibilités offertes par un outil puissant comme Yeoman. Il permet d’interagir avec l’utilisateur pour générer un projet adapté aux besoins du programmeur. Avec ceci en tête, j’ai décidé de construire mon propre générateur encapsulant les philosophies de tests unitaires et d’analyseur de code pour bâtir mes propres outils PowerShell.

Parce que partager c’est aimer, j’ai aussi décider de publier le générateur sur npm.

Installer le générateur

Un générateur Yeoman est essentiellement un package npm. L’installation suit la même logique. Afin d’installer Yeoman ainsi que le générateur, exécuter les commandes suivantes d’une console.

npm install -g yo
npm install -g generator-psmodule

Utiliser le générateur

Premièrement, créez un répertoire vide qui servira à générer le module. De ce répertoire, l’invocation du générateur se fait en exécutant la commande suivante :

yo psmodule

Si Yeoman et le générateur sont installés convenablement, vous obtiendrez les résultats suivants :

Invoking The Generator

Merveilleux! Maintenant le générateur posera 3 questions avant d’échafauder le squelette du module.

  1. Le nom du module (prendra le nom du répertoire de travail par défaut)
  2. L’auteur du module
  3. La description du module

Answering The Questions

Et voilà! Un module PowerShell de base, configuré et prêt à être raffiné en plusieurs unités logiques. À partir de la capture d’écran ci-dessous nous pouvons, au premier coup d’œil, voir que la première réponse fournie est utilisée pour nommer et modéliser certains des fichiers.

The Module's Skeleton

Plongeons dans le module généré

La première chose à regarder est le manifeste du module. À l’intérieur, nous pouvons voir que les réponses fournies au générateur ont aidé à modéliser le fichier.

The Generated Manifest File

Philosophie d’organisation des sources

Possédant un fort passé de programmeur C#, j’aime vraiment l’approche architecturale « basée sur des classes logicielles ». Un fichier source, que j’aime bien les appeler unité logique, est une entité en soi sans la syntaxe Verbe-Nom préconisée par le langage. Toutefois, à l’intérieur de l’unité, il s’agit d’une toute autre histoire. L’idée est d’utiliser les bonnes portées de fonctions pour l’encapsulation et utiliser la syntaxe Verbe-Nom. Pour une liste des verbes supportés référez-vous à la cmdlet Get-Verb. Vous pouvez utiliser vos propres verbes mais par mesure de cohérence, je préfère utiliser les verbes standards.

Voici un exemple fourni par le module généré.

Function Example

Philosophie de test

Je mets à profit les fonctionnalités de Setup de tests fournis par Pester afin de bien configurer l’environnement pour l’unité logique sous test.

  1. Je pousse l’emplacement courante relative à l’exécution du script. Mon expérience m’a prouvé qu’il est plus aisé de référer aux fichiers sur le disque de manière relative au contexte d’exécution.
  2. Mise en mémoire de l’unité logique sous test.
  3. Utilisation du TestDrive de Pester permettant la configuration de données de tests qui seront utilisée par les cas de tests.

Test Environment Setup

Pour chacun des blocs Context, le contexte des tests spécifiques peut être appliqué.

Test Context Setup

Publier votre module

Le générateur fournit également un mécanisme pour publier le module dans la galerie PowerShell. J’ai déjà couvert comment y parvenir ici. Jetez un coup d’œil au script Publish-psdawg.ps1.

Conclusion

Les générateurs peuvent sauver beaucoup de temps mais je recommande fortement de garder en tête le principe que la simplicité c’est beau. Un générateur stupide ne demande pas beaucoup de maintenance de la part de votre équipe de développement et est facile à comprendre lorsque vient le temps d’ajouter des fonctionnalités supplémentaires.

Le projet est disponible publiquement sur github et vous êtes plus que bienvenus à soumettre vos idées où à participer à son développement.

Vous avez un concept innovateur...

Laissez-nous vous proposer les meilleurs technologies