Table des matières

Configuration et utilisation d'Hyper-V en ligne de commande

Hyper-V est un hyperviseur de niveaux 1 et 2, disponible sous Windows. Il peut être administré soit via une interface graphique avec les composants MMC integrés à Windows, soit via la ligne de commande avec PowerShell. Ce tutoriel présente les principales commandes permettant de configurer et de gérer des machines virtuelles Hyper-V, ainsi que les administrer, uniquement à l'aide de PowerShell.

Gérer les commutateurs virtuels

Un commutateur virtuel permet aux machines virtuelles d'avoir accès au réseau de la machine physique, ou de créer un réseau interne dédié aux VM et isolé de l’extérieur.

Get-NetAdapter

Cartes réseaux disponibles sur l'hyperviseur

New-VMSwitch -name Bridge -NetAdapterName Ethernet0 -AllowManagementOS $true
New-VMSwitch -name InternalSwitch -SwitchType Internal
New-VMSwitch -name PrivateSwitch -SwitchType Private

Explication des arguments dans les commandes ci-dessus :

Get-VMSwitch 
Get-VMSwitch | Format-List
Remove-VMSwitch -Name External 

Commutateurs virtuels de type NAT

Les commutateurs virtuels de type Interne peuvent utiliser le mécanisme NAT. Celui-ci sert à partager l'adresse IP de l'hyperviseur avec les machines d'un même réseau privé.

 New-VMSwitch -SwitchName SWNAT -SwitchType Internal
New-NetIPAddress -IPAddress 192.168.3.1 -PrefixLength 24 -InterfaceAlias "vEthernet (SWNAT)"
New-NetNat -Name NAT01 -InternalIPInterfaceAddressPrefix 192.168.3.0/24
remove-netnat -Name NAT01

VLANs

Les machines virtuelles peuvent être associées à un VLAN (réseau local virtuel) afin d'isoler les flux entre les machines qui ne doivent pas se voir.

Set-VMNetworkAdapterVlan -VMName NanoServer01 -Access -VlanId 121
Set-VMNetworkAdapterVlan -VMName NanoServer01 -Trunk -AllowedVlanIdList 1-100 -NativeVlanId 10

:!: -AllowVlanIdList permet d'indiquer la plage de vlans à associer à la machine.

Set-VMNetworkAdapterVlan -ManagementOS -Access -VlanID 20
Set-VMNetworkAdapterVlan -VMName NanoServer01 -Untagged

:!: Lorsqu'une machine virtuelle possède plusieurs cartes réseau, il faut utiliser l'option -VMNetworkAdapter pour spécifier celle que l'on souhaite configurer.

Switch Embedded Teaming (SET)

Le SET permet d’agréger jusqu'a 8 cartes réseau physiques en un seul switch virtuel afin de tolérer d'une d'entre elles ou de faire de l'équilibrage de charge entre plusieurs adaptateurs. Les adaptateurs à agréger ne peuvent pas être associé à d'autre switchs virtuels. Les switchs SET se configurent de la même façon que les switch virtuels mais à quelques détails près.

New-VMSwitch -Name TEAMSET -NetAdapterName "NIC 1","NIC 2" -EnableEmbeddedTeaming $true

Comme on peut le voir ci-dessus, on indique les carte réseau à agréger avec l'option -NetAdapterName suivie du nom de chacune d'elles séparées par une virgule.

Set-VMSwitchTeam -Name TEAMSET -LoadBalacingAlgorithm Dynamic
Remove-VMSwitch -Name TEAMSET

Création d'une VM

New-VM -Name NanoServer01 -MemoryStartupBytes 2GB -BootDevice VHD -VHDPath C:\VM\VM01\VM01-disk.vhdx -Path C:\VM\VM01\ -Generation 2 -Switch Bridge

VM Créée

Explication des arguments dans la commande ci-dessus :

⇒ Afin de générer un nouveau disque dur virtuel de 20GB lors de la création d'une VM, il faut utiliser les arguments suivants à la place de -VHDPath :

-NewVHDPath C:\VM\VM01\VM01-newdisk.vhdx -NewVHDSizeBytes 20GB

Tel que présenté ci-dessus, bien indiquer le chemin du nouveau fichier VHD(x) à créer et sa taille (en MB ou en GB).

Set-VMDvdDrive -VMName TestVM -Path C:\ISO\WinBuild.iso
Get-VMDvdDrive -VMName TestVM
Remove-VMDvdDrive -VMName TestVM -ControllerNumber 1 -ControllerLocation 0

Gestion des machines virtuelles

Get-VM

On peut concaténer la commande Format-List (avec un pipe |) pour afficher les informations sous forme de liste (et non de tableau) et avoir quelques informations supplémentaires sur les VM.

Start-VM -Name nanoserver01

:!: Remplacer nanoserver01 par le nom de la VM à démarrer.

Stop-VM -Name nanoserver01

:!: L'argument optionnel -force sert à forcer l'arrêt de la VM quitte à fermer les applications ouvertes et les fichiers non sauvegardés.

Stop-VM -Name nanoserver01
Remove-VM -Name nanoserver01

L'argument optionnel -Force permet d'éviter le message de confirmation de suppression.

Export-VM -Name NanoServer01 -Path C:/VM/Export_VM/
Import-VM -Path C:\VM\Export\NanoServer\2B91FEB3-F1E0-4FFF-B8BE-29CED892A95A.vmcx' -Copy -GenerateNewId
Move-VMStorage NanoServer01 -DestinationStoragePath D:\TestVM
Move-VM -Name "Test VM" -DestinationHost remoteServer

Gestion des disques durs virtuels

New-vhd -Dynamic -Path E:\VDISKS\Disk01.vhdx -SizeBytes 10GB
New-vhd -Dynamic -Path E:\VDISKS\Disk02.vhd -SizeBytes 10GB

Remplacer l'option -Dynamic par -Fixed pour obtenir un disque dur virtuel à taille fixe.

Convert-VHD -Path c:\test\testvhd.vhd -DestinationPath c:\test\testvhdx.vhdx
Resize-VHD -Path c:\DISKS\Disk01.vhdx -SizeBytes 50GB

Inverser les chemins des disques sources et destination pour convertir du VHDX en VHD.

Get-VMHardDiskDrive -VMName NanoServer01
Add-VMHardDiskDrive -VM NanoServer01 -ControllerType SCSI -Path C:\Disks\disk03.vhdx
Remove-VMHardDiskDrive -VMName NanoServer01 -ControllerType SCSI -ControllerNumber 1 -ControllerLocation 0

:!: Bien faire attention au contrôleur IDE/SCSI où le disque est attaché pour ne pas détacher le mauvais.


Gestion des points de contrôle (snapshots)

Les points de contrôle permettent de créer l'image à un instant T d'une machine virtuelle afin de pouvoir rétablir l'état actuel de la VM en cas de problème.

Il existe deux types de points de contrôles sous Hyper-V :

⇒ Le type de point de contrôle d'une VM peut être configuré comme ceci :

Set-VM -Name NanoServer01 -CheckpointType Standard

:!: On peut aussi utiliser les valeurs Production et ProductionOnly derrière l'argument -CheckpointType pour activer les points de contrôles mixtes ou de production.

Checkpoint-VM -Name NanoServer01
Get-VMSnapshot -VMName NanoServer01

Listing des snapshots de la VM "NanoServer01"

Rename-VMCheckpoint -VMName NanoServer01 -Name "NanoServer01 - (12/11/2020 - 10:10:20)" -NewName "Snapshot-test"
Restore-VMSnapshot -Name "Snapshot-test" -VMName NanoServer01 -Confirm:$false
Remove-VMSnapshot -VMName NanoServer01 -Name Snapshot-test

Réglages supplémentaires

Set-VMProcessor -VMName nanoserver01 -ExposeVirtualizationExtensions $true
Get-VMNetworkAdapter -VMName nanoserver01 | Set-VMNetworkAdapter -MacAddressSpoofing On

Connexion à distance à l'hyperviseur

La connexion à distance à Hyper-V se fait habituellement grâce au protocole WinRM, soit par le biais du composant MMC Gestionnaire Hyper-V, soit par le biais de la console PowerShell. Sur le client (windows 10 ou windows server), l'installation des outils d'administration Hyper-V est requise (interface graphique et/ou module PowerShell), à différencier de la platerforme Hyper-V qui est le moteur de virtualisation (installé sur l'hyperviseur).

Commencer par activer les connexions Powershell distantes sur l'hyperviseur :

Enable-PSRemoting

Pour se connecter à un hyperviseur associé au même domaine Active Directory que le client, ignorer les étapes ci-dessous et passer directement à la partie Connexion à l'hyperviseur de ce tutoriel.

Pour se connecter à un hyperviseur depuis un poste client faisant partie d'un groupe de travail ou d'un domaine différent, il faut configurer WinRM et le protocole CredSSP de façon à ce que le serveur et le client puissent échanger des informations d'identification en toute sécurité. Cette procédure à détaillé juste après.

Configuration de WinRM et CredSSP pour la connexion d'un client hors domaine

Configuration côté serveur

Activer l'authentification CredSSP sur l'hyperviseur :

Enable-WSManCredSSP -Role "Server"

Sans oublier de valider avec O.

Activer la connexion CredSSP sur le serveur

Configuration côté client

Pour qu'un client hors domaine puisse se connecter au serveur via WinRM, il doit autoriser la connexion au serveur distant et l'échange d'informations d'identification via le protocole CredSSP. Passer tout d'abord la carte réseau active en mode “Réseau privé” (Cliquer ici pour voir le tutoriel).

Ensuite, activer WinRM avec la commande suivante :

WinRM quickconfig

Et répondre “O” aux questions posées.

Ce qui doit donner :

Activation de WinRM sur le client

Puis, ajouter le serveur à la liste des hôtes aux hôtes WinRM de confiance (adresse IP ou nom DNS) :

Set-Item WSMan:\localhost\Client\TrustedHosts -Value "HV01-TEST.nocterie.lab"

Et valider avec O.

Comme cela :

Ajout du serveur aux hôtes WinRM de confiance

Ensuite, activer l'authentification CredSSP pour ce même serveur :

Enable-WSManCredSSP -Role client -DelegateComputer HV01-TEST.nocterie.lab

Et valider avec O.

Tant qu'aucune erreur ne s'affiche, tout fonctionne correctement.

Voici le résultat :

Activation de l'authentification CredSSP avec le serveur

Connexion à l'hyperviseur

Avant de passer à la suite, s'assurer que les fonctionnalités Windows Outils d'administration Hyper-V sont installés sur le client (Disponible uniquement sur les éditions pro, éducation, entreprise, et serveur de Windows). Ils peuvent être installés via le panneau de configuration des programmes et fonctionnalités, via la commande powershell add-WindowsFeature rsat-hyper-v-manager ou encore en téléchargeant les outils d'administration de serveur distant pour Windows 10 (rsat) sur le site de Microsoft.

Une fois ces outils installés, ouvrir le gestionnaire Hyper-V, faire un clic droit sur le nœud en haut à droite nommé Gestionnaire Hyper-V, puis faire Se connecter au serveur.

Dans la petite boîte de dialogue qui s'ouvre alors, cocher Autre ordinateur, et renseigner l'adresse IP ou le nom d'hôte de l'hyperviseur (tel qu'il a été indiqué plus tôt lors de la configuration de WinRM et de CredSSP).

Afin de renseigner des identifiants de connexion, cliquer sur Définir l'utilisateur dans le but d'afficher la fenêtre d'identification. Les identifiants peuvent être enregistrés localement pour éviter de devoir les retaper à chaque fois.

Connexion à l'hyperviseur depuis le gestionnaire Hyper-V

Dès que le client est connecté, on a accès à toutes les machines virtuelles sur l'hyperviseur, comme si elles étaient instanciées localement :

Machines virtuelles sur l'hyperviseur

C'est gagné ! =)


Sources

Présentation et fonctionnement d'Hyper-V sur le site de Microsoft

Liste des commandes PowerShell associées à Hyper-V sur le site de Microsoft

Se connecter à un serveur Hyper-V avec un client hors domaine sur LeSysAdmin.com