En pratique: à la découverte des commandes PowerShell de base pour gérer Hyper-V

Avec notre partenaire SearchServervirtualization.com, nous vous proposons un mode d'emploi rapide de quelques cmdlets Powershell de base pour piloter les fonctions d'Hyper-V. Ces commandes permettent de contrôler les fonctions de l'hyperviseur depuis le mode ligne de commande et peuvent être utilisées dans le cadre de scripts plus complexes afin d'automatiser ou d'orchestrer des processus complets de provisionning ou de déplacement de VM.

La console d’administration de Microsoft Hyper-V et System Center Virtual Machine Manager (SCVMM) sont de bons outils graphiques pour la gestion des machines virtuelles (VM), des serveurs hôtes et des diverses tâches d’administration à réaliser au-dessus d’Hyper-V. Toutefois, comme la plupart des outils d’administration s’appuyant sur une interface utilisateur graphique (GUI) , ces programmes ont des capacités de personnalisation limitées et sont en général contraints par les limites imposées par l’interface graphique. C’est la raison pour laquelle Microsoft propose aussi une collection complète de commandlets (cmdlets) PowerShell, en fait  une suite d’outils en mode ligne de commande afin de répondre aux besoins des administrateurs souhaitant passer outre les limitations de l’interface graphique (ou préférant tout simplement le mode CLI).

Quelques notions de base dans Powershell
Cmdlets: Ce sont les composants de base pour les  commandes. les Cmdlets effectuent une action et retourne un  objet .Net pour  la commande suivante. Toutes les cmdlets ont une structure de type verbe-nom (par exemple Get-VM, Get-Help...).

Commandes : Une commande assure l'exécution d'une ou plusieurs Cmdlets et y associe des paramètres qui permettent de mettre en œuvre des fonctions spécifiques.

Pour plus d'informations sur les cmdlets PowerShell et les commandes, en comprendre leurs différences, consultez l’annuaire des Cmdlets de Microsoft.
Cliquez pour dérouler

Les Cmdlets PowerShell pour SCVMM et Hyper-V permettent d’accéder à un ensemble de fonctions qui simplifient l'administration des environnements virtuels. Dans cet article, nous nous concentrerons sur nos commandes favorites. Il est à noter que même si vous ne disposez pas d’une copie de SCVMM, ces commandes PowerShell permettent d’accéder à la plupart des capacités de l’hyperviseur de Microsoft, y compris l'obtention des informations de base, la création de nouvelles VM ou la mise en oeuvre de migrations en direct de machines virtuelles.

Avant de commencer, vous devez tout d'abord télécharger et installer le module Hyper-V PowerShell. Il vous faudra peut -être changer le mode d'exécution de PowerShell de façon à ce que le module fonctionne correctement. En effet, si ce dernier s’exécute sans souci sur Windows Server 2008, dans Windows 7, il est nécessaire de modifier la politique d'exécution de scripts pour faire sauter toutes les restrictions d’exécution. Cela n’est pas forcèment optimal en matière de sécurité, mais nécessaire pour exécuter les Cmdlets PowerShell Hyper-V sur un poste non serveur.

Une fois l'installation du module Hyper-V PowerShell effectuée, il est temps d'essayer quelques fonctions de base. Lorsque vous serez plus à l'aise avec ces cmdlets PowerShell, vous pourrez les combiner pour former des commandes ou des scripts plus complexes et plus utiles.

Get-VM.
Cette cmdlet est la base de beaucoup de scripts, et elle est assez explicite. Get-VM récupère des informations sur les machines virtuelles et permet d’avoir un aperçu rapide des VM sur un serveur particulier. Pour obtenir des informations sur les VM de l’hôte WebServer1, on tape ainsi :
    Get-VM -WebServer1

Figure 1
(Cliquez sur l'image pour l'agrandir.)
hv ps get vm


Notez que vous devez préciser le nom d’un serveur particulier en utilisant un suffixe de type -WebServer1, comme vous le feriez dans la console Hyper-V.

New-VM, Set-VMMemory, Set-VMCPUCount, Add-NewVirtualHardDisk.
Ce groupe de Cmdlets Hyper-V sert à provisionner de nouvelles machines virtuelles. L'Assistant graphique d’Hyper-V Manager est peut être plus facile à utiliser, mais si vous avez besoin de créer plusieurs machines virtuelles à la fois, cette méthode peut permettre de gagner du temps.

Figure 2
(Cliquez sur l'image pour l'agrandir)
hv ps new vm


Avec ces commandes, une légère modification vous permet d'ajouter ou de modifier plusieurs machines virtuelles en même temps. La commande suivante permet ainsi de créer trois VM sur le lecteur d:
      New-VM-Server Host1 -Name RobTest2, RobTest3, RobTest4 -Path d:

Celle-ci alloue 1024Mo de mémoir eà chacune des machines virtuelles :
      Set-VMMemory-Server Host1 -VM RobTest2, RobTest3, RobTest4 1024


Tandis que celle-ci affecte 4 CPU virtuel par VM :
      Set-VMCPUCount-Server Host1 -VM RobTest2, RobTest3, RobTest4 4

Enfin, cette dernière associe un disque de 24 Go de capacité à chaque VM
      Add-NewVMHardDisk-Server Host1 -VM RobTest2, RobTest3, RobTest4 -Size 24GB

Comme vous pouvez le voir, en créant simultanément plusieurs machines virtuelles, PowerShell permet de gagner du temps.

Start-VM, Stop-VM, VM-Save, Shutdown-VM.
Contrôler l'état des machines virtuelles est également possible via la ligne de commande. Dans certains cas où l'interface n'est pas disponible, ces commandes permettent également de conerver la main en contrôlant les arrêts desVM ou en sauvegardant leur état avant l’entrée dans un processus de diagnostic. Comme avec les commandes précédentes, on peut changer l'état de plusieurs machines virtuelles à la fois.

    Start-VM-Server Host1-VM RobTest2, RobTest3, RobTest4
    Stop-VM-Server Host1-VM RobTest2, RobTest3, RobTest4
    Save-VM-Server Host1-VM RobTest2, RobTest3, RobTest4
    Shutdown-VM-Server Host1-VM RobTest2, RobTest3, RobTest4

Note: il est nécessaire que la machine virtuelle à stopper incorpore les composants d'intégration Hyper-V pour utiliser la commande shutdown-VM (avec les VM Linux, il faut la version 2.1 de ces composants).

Move-VM.
PowerShell peut également aider pour gérer des VM au sein d’un cluster Hyper-V. La commande suivante permet ainsi de déplacer des machines virtuelles entre les noeuds du cluster (ce qui peut être utile pour des opération de maintenance, ou dans le cadre d’un processus d’orchestration faisant appel à des scripts).

    Move-VM -Server Host1 -VM RobTest2 -Destination Host2 -- force

Il est possible de déplacer plusieurs machines virtuelles, mais cela doit être fait de façon séquentielle.

    Move-VM -Server Host1 -VM RobTest2, RobTest3, RobTest4 -Destination Host2 --force

L’utilisation d’un caractère joker permet de déplacer toutes les machines virtuelles de Host1 qui commencent par RobTest vers Host2.

    Move-VM -Server Host1 -VM RobTest% -Destination Host2 --force

Note: Pour éviter le message "WARNING: Cluster commands not loaded. Import-Module FailoverClusters and try again" et utiliser les fonctionnalités de cluster de PowerShell, il convient de charger le module de cluster failover en exécutant la commande Run, Import-Module FailoverCluster.

Une fois que vous vous serez familiarisé avec ces cmdlets PowerShell de base, vous pourrez passer à un stade plus avancé en testant les commandes PowerShell documentées dans la bibliothèque de référence de PowerShell pour Hyper-V. Avec le temps, vous devriez être en mesure d'orchestrer des tâches plus complexes et plus productives avec PowerShell

A propos de l'auteur
Rob McShinsky est ingénieur systèmes au Dartmouth Hitchcock Medical Center de Lebanon, dans le New Hampshire. Il a plus de 12 ans d'expérience dans l'industrie et travaille sur la virtualisation de serveurs depuis 2004. Il a été parmi les premiers à adopter la technologie Hyper-V et System Center Virtual Machine Manager 2008 dans le cadre du programme d’évaluation de ces technologies (le centre médical est une référence Microsoft).

Pour approfondir sur Administration de systèmes