[Hyper-V 3] Présentation des commandlets PowerShell

Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j’avais envie de revenir sur une des fonctionnalités que j’attends le plus et que, en bon geek que je suis, j’utilise déjà : Hyper-V 3 ainsi son module PowerShell.

Il y a déjà pléthore de posts de parts et d’autres qui référençent les différentes nouvelles fonctionnalités d’Hyper-V 3 (les réplicat, VHDX, disponibilité sur Windows 8, SAN virtuels…) mais je n’en ait pas vu beaucoup sur les avancées niveau scripting. Bien entendu, ces informations ne valent que pour la Developer Preview et sont sujêtes à changement.

On pourrait croire qu’avec WinRT et Metro, tout est axé sur le tactile et au diable les shells ! Il n’en est rien. Pour donner un ordre d’idée, Windows 8 Developer Preview contient dans les 45 modules ( (Get-Module -ListAvailable).Count ) pour pouvoir tout piloter ou presque avec une facilité déconcertante. Bien que ce soit toujours possible, utiliser WMI n’est plus une obligation pour arriver à ses fins.

Hyper-V étant un citoyen de première classe, il dispose lui aussi de son module qu’on référence comme suit depuis un PowerShell en mode Administrateur (vous n’avez pas désactivé l’UAC, n’est-ce pas ??) :

Import-Module Hyper-V

Microsoft n’a pas été avare sur les commandes, il n’y en a pas moins de 148 !

image

Avec, on peut pratiquement tout faire depuis la création d’une VM à la configuration d’un SAN virtuel.

Je n’ai pas testé l’intégralité des commandes mais la majorité que j’aie vue implémente les “paramètres communs” :

image

Ces paramètres que, dans l’idéal, toute commande PowerShell devrait implémenter permettent d’afficher ou non des messages de confirmation avec Confirm (à désactiver avec prudence !) et de contrôler un tir à blanc avec WhatIf.

Par exemple, la commande ci dessous lance un tir à blanc de création de VM :

image

Qu’est-ce que ça pourrait donner si on voulait pouvoir rendre l’intégralité d’un script inerte simplement en changeant un commutateur ? Prenons le script suivant :

ComplexHyperVSuperScript.ps1:
param ([switch]$WhatIf = $false)

Import-Module Hyper-V -ErrorAction:SilentlyContinue

New-VM -Name Toto -NoVHD -WhatIf:$WhatIf
New-VHD -Path ./test.vhd -SizeBytes 3145728 -WhatIf

D’une complexité folle, il créé une VM Toto et un VHD test.vhd. Grâce au commutateur global au script $WhatIf que l’on passe en paramètre à tous nos appels de fonctions, on peut arriver à un résultat assez prédictible et testable. Ainsi, le script avec WhatIf et sans donnera les résultats ci-dessous :

image

Le premier appel n’affiche que des messages (qu’on pourrait qualifier d’un peu trop synthétiques) indiquant ce qui sera fait tandis que le second effectue les actions et retourne des résultats détaillés.

Et ces résultats sont très utiles car il ne s’agit pas de simples lignes de textes mais d’objets. Les commandlets Hyper-V ont toutes des signatures similaires à celle-ci :

image

Elles retournent un Object .NET correspondant à ce qui a été manipulé par la commande. Dans notre script ci-dessus, il s’agissait respectivement d’un objet VM et d’un objet VHD, eux-mêmes avec leurs méthodes et leurs propriétés.

Et c’est très intéressant ! Car avec la notion de sous-shells, on a la possibilité de chaîner plusieurs appels de commandes redirigeant ainsi la sortie d’une à l’entrée de la suivante. Ainsi, la ligne ci-dessous me permettra de réduire la taille occupée sur disque de tous les VHD de toutes les VM présentes sur mon Hyper-V :

Get-VM | Get-VHD | Optimize-VHD

On peut imaginer aussi la création de machines de tests (délibérément sans VHD pour la simplicité de l’exemple) ainsi que leur suppression :

foreach ($i in 1..10) { New-VM -Name "TestVM_$i" -MemoryStartupBytes 1073741824 -NoVHD | Set-VMMemory -DynamicMemoryEnabled:$true -StartupBytes 1073741824 -MaximumBytes 2147483648 -MinimumBytes 826277888 }

Get-VM Test* | Remove-VM -Confirm:$false -Force

Les développeurs qui n’ont que 2 ou 3 VM de développement n’en auront pas forcément l’utilité mais, personnellement, il m’est arrivé de jongler entre un client où je devais émuler une infra à 3 VM (UAG, ADFS, SP) et d’autres clients avec encore d’autres configurations. La flemme aidant, j’ai fini par écrire quelques fonctions dans mon profile PowerShell afin de lancer et éteindre mes grappes de VM en un seul appel de commande.

Typiquement, une fonction qui appelle Start-VM “Toto”, “Tutu”, “Tata” en arrivant le matin et une autre qui appelle Shutdown-VM/Save-VM “Toto”, “Tutu”, “Tata” le soir.

Pour paraphraser l’Agent Smith, "on ne devrait jamais confier à un humain le travail d’un programme"; Windows (Server) 8 sera résolument dans le même esprit.

J’espère que cet avant-gout vous aura donné l’eau à la bouche !

Publié mardi 31 janvier 2012 16:01 par Pierrick CATRO-BROUILLET
Classé sous , , ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires


Les 10 derniers blogs postés

- Simuler facilement l’envoi de mail par Blog de Jérémy Jeanson le 05-22-2013, 12:52

- ProcDump 6.0 : support du filtrage sur messages d'exceptions .NET, des filtres multiples et du ciblage par nom de service par CoqBlog le 05-20-2013, 14:50

- Votez pour le TOP 10 des influenceurs SharePoint francophones ! par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 12:59

- [Conf’SharePoint] Dernier rappel ! :-) par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 09:09

- [ #SharePoint 2013 ] les modèles de sites standards… par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 09:03

- 10 erreurs de compréhension concernant SharePoint… par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 08:27

- Conf’SharePoint : 10 bonnes raisons pour ne pas la rater par Le petit blog de Pierre / Pierre's little blog le 05-14-2013, 02:24

- [Event] Soirée de lancement Agile .NET France à Lyon par Blog Agile/ALM de Vincent THAVONEKHAM le 05-13-2013, 01:29

- .NET / Debug : inspection de la mémoire d'applications .NET (dump ou processus live) : première livraison d'une librairie .NET par Microsoft par CoqBlog le 05-11-2013, 22:21

- SharePoint : Incompatibilité avec Internet Explorer 10 (IE10) par Blog Technique de Romelard Fabrice le 05-08-2013, 16:29