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.
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
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 :
-Name : Désigne le nom du commutateur virtuel à créer-NetAdapterName : Nom de l'adaptateur réseau physique à lier au commutateur externe (voir la première commande pour les lister)-AllowManagementOS : Autoriser l'utilisation de la carte réseau par l'hyperviseur-SwitchType : Type de commutateur virtuel (external, internal, ou private)-NatSubnet : Permet de préciser le réseau privé à Natter (pour les switchs virtuels de type NAT)Get-VMSwitch
Get-VMSwitch | Format-List
Remove-VMSwitch -Name External
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
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.
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
New-VM -Name NanoServer01 -MemoryStartupBytes 2GB -BootDevice VHD -VHDPath C:\VM\VM01\VM01-disk.vhdx -Path C:\VM\VM01\ -Generation 2 -Switch Bridge
Explication des arguments dans la commande ci-dessus :
-Name : Désigne le nom de la VM à créer-MemoryStartupBytes : Quantité de mémoire vive minimale allouée au démarrage de la VM (en GB ou en MB)-BootDevice : Type de périphérique de démarrage (VHD, IDE, CD, Floppy, LegacyNetworkAdapter ou NetworkAdapter)-VHDPath : Chemin vers le fichier VHD (ou VHDx) sur lequel la machine doit démarrer (à la suite de -BootDevice)-Path : Chemin d'accès vers le répertoire de la VM-Generation : Génération de la VM (1 ou 2)-Switch : Commutateur réseau virtuel à associer à la VM
⇒ 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
-VMName : permet de spécifier le nom de la VM à laquelle attacher le DVD virtuel-Path : Chemin vers l'image disque concernéeGet-VMDvdDrive -VMName TestVM
Remove-VMDvdDrive -VMName TestVM -ControllerNumber 1 -ControllerLocation 0
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
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.
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.
NanoServer01 :Checkpoint-VM -Name NanoServer01
Get-VMSnapshot -VMName NanoServer01
NanoServer01 - (12/11/2020 - 10:10:20) de la VM NanoServer01 en Snapshot-test : Rename-VMCheckpoint -VMName NanoServer01 -Name "NanoServer01 - (12/11/2020 - 10:10:20)" -NewName "Snapshot-test"
Snapshot-test de la VM NanoServer01 :Restore-VMSnapshot -Name "Snapshot-test" -VMName NanoServer01 -Confirm:$false
Snapshot-test de la VM NanoServer01 :Remove-VMSnapshot -VMName NanoServer01 -Name Snapshot-test
Set-VMProcessor -VMName nanoserver01 -ExposeVirtualizationExtensions $true
Get-VMNetworkAdapter -VMName nanoserver01 | Set-VMNetworkAdapter -MacAddressSpoofing On
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.
Activer l'authentification CredSSP sur l'hyperviseur :
Enable-WSManCredSSP -Role "Server"
Sans oublier de valider avec O.
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 :
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 :
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 :
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.
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 :
C'est gagné !