[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

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01