preloader
20 June 2011 / #.net #Powercli #Powershell

Création d’un cmdlet Powershell [Partie1]

post-thumb

Dans ce grand monde de Powershell, il nous est souvent arrivé de se demander au final qu’est ce qu’était un commandelaite (aka cmdlet).

Quoi de mieux pour essayer de répondre à cette question que d’essayer de créer les siens ^^ Créer un cmdlet pour créer un cmdlet n’est pas forcement intéressant sans raison (quoique déjà uniquement la curiosité de savoir comment faire, mais bon :p), mais dans notre cas, on avait une réelle volonté de fournir un module de management Powershell au Fling de VMware : PXEManager.

PXE

Ce billet n’est pas là pour parler de ce magnifique outil (même si on pourrait en parler pendant des heures, vous pouvez déjà aller voir du côté du billet de notre hyperzozor préféré : PXE Manager : Déployer ESXi aussi facilement qu’une VM).

Sachez cependant que ceux qui ne l’ont jamais testé devraient le faire sur le champ. On l’utilise au quotidien et on se demande vraiment comment on faisait avant ^^ Bref, un grand bravo à Max pour ce tool excellentissime ! (mais revenons sur le sujet principal du billet !)

On avait déjà regardé comment faire une surcharge de cmdlet existants afin de modifier leurs comportements par défaut (disponible sur le billet Reconnexion automatique en PowerCLI), cette fois, on va donc regarder comment créer des cmdlets à partir de rien et comment on peut les utiliser.

Déjà, première différence, là où la surcharge pouvait se faire directement en Powershell, la création de cmdlet passe elle par un langage .NET (dans notre exemple C#). Qui dit développement C# dit Visual Studio (enfin surtout dans notre cas ^^), donc dans ce billet, les captures d’écran et le code généré seront pris depuis un Visual Studio 2010.

Le principe de la création de cmdlet est de :

  1. Création d’une classe .NET
  2. Liaison avec les WebServices de PxeManager
  3. Génération de la classe en .dll
  4. Import de la dll dans les modules cmdlet (via le cmdlet Import-Module)
  5. Utilisation des cmdlet créés

Création d’une classe .NET

La création d’une classe .NET passe par la création d’un nouveau projet sous Visual Studio :

ScreenShot129

Nous avons donc à ce niveau une classe vide dans laquelle nous allons ajouter notre code.

La prochaine étape va être d’ajouter les références permettant de manipuler les objets Powershell.

Cette référence est constituée d’un fichier .dll qui est installé avec Powershell.

Ce fichier se nomme System.Management.Automation.dll et se trouve dans :

C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0

Pour rajouter cette référence à notre projet, il suffit de faire un bouton droit sur le dossier References et de cliquer sur Add Reference

ScreenShot130

Dans l’onglet Browse, allez chercher le fichier C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0\System.Management.Automation.dll et cliquer sur OK

ScreenShot133

ScreenShot132

Cela va nous permettre d’utiliser la classe System.Management.Automation.Cmdlet afin de manipuler les objets Powershell dans notre code C# (infos sur la classe dispo sur http://msdn.microsoft.com/en-us/library/ms582518(v=VS.85).aspx)

Note : Afin de ne pas faire un billet de 50 pages, il va être découpé en plusieurs parties. La suite dans le prochain billet ^^


> Frederic MARTIN