La virtualisation est une technologie qui permet de faire fonctionner plusieurs systèmes d'exploitation sur un seul et même serveur physique. Chaque système virtualisé, appelé machine virtuelle (VM), croit disposer de ses propres ressources matérielles, alors qu'elles sont en réalité partagées et gérées par un logiciel spécialisé appelé hyperviseur.
💡 Analogie : Imaginez un immeuble divisé en plusieurs appartements. L'immeuble représente le serveur physique. Chaque appartement est une VM : il a sa propre porte, son propre espace, ses prises électriques — mais les fondations, la toiture et les canalisations sont partagées.
| Terme | Définition |
|---|---|
| Hôte (Host) | Le serveur physique réel qui exécute Hyper-V |
| Machine virtuelle (VM) | L'ordinateur virtuel qui tourne sur l'hôte |
| Hyperviseur | Le logiciel qui crée et gère les VM |
| Snapshot / Point de contrôle | Photo instantanée de l'état d'une VM |
| vSwitch | Commutateur réseau virtuel pour connecter les VM |
| VHD / VHDX | Fichier représentant le disque dur d'une VM |
Type 1 — Bare-metal : s'installe directement sur le matériel, sans OS hôte. Très performant. Utilisé en entreprise.
Type 2 — Hosted : s'installe comme une application sur un OS existant. Plus simple, mais moins performant.
Hyper-V est un hyperviseur de Type 1, même quand il est installé sur Windows 10/11. Windows devient lui-même une VM privilégiée !
Hyper-V est la solution de virtualisation intégrée à Windows, développée par Microsoft. Il est disponible :
┌─────────────────────────────────────────────────────────┐
│ Matériel physique │
├─────────────────────────────────────────────────────────┤
│ Hyperviseur Hyper-V │
├──────────────────┬──────────────────────────────────────┤
│ Partition parente (Windows hôte) │ VM 1 │ VM 2 │
│ - Gestionnaire Hyper-V │ │ │
│ - PowerShell / WMI │ │ │
└────────────────────────────────────────┴────────┴───────┘
La partition parente est le Windows que vous utilisez normalement. Elle a un accès privilégié à l'hyperviseur pour créer et gérer les VM enfants.
Ouvrez PowerShell et tapez :
# Vérifier les capacités du processeur pour Hyper-V
Get-ComputerInfo -Property "HyperV*"
Vous devriez voir HyperVRequirementVirtualizationFirmwareEnabled : True.
Méthode 1 — Via PowerShell (en tant qu'Administrateur) :
# Activer le rôle Hyper-V (nécessite un redémarrage)
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Méthode 2 — Via les fonctionnalités Windows :
Méthode 3 — Via DISM (en tant qu'Administrateur) :
# Alternative avec DISM
DISM /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V
⚠️ Un redémarrage est nécessaire après l'installation.
# Vérifier que le service Hyper-V tourne
Get-Service -Name vmms
# Vérifier la version d'Hyper-V
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V
# Ouvrir le gestionnaire Hyper-V
virtmgmt.msc
┌──────────────────────────────────────────────────────────────┐
│ Gestionnaire Hyper-V │
├──────────────┬───────────────────────────────┬───────────────┤
│ Hôtes │ Liste des VM │ Actions │
│ │ │ │
│ > NOM-PC │ Nom | État | CPU | RAM │ Nouvelle VM │
│ │ VM-Test | Arrêt | 0% | 2Go │ Importer VM │
│ │ VM-Web | Marche| 15% | 4Go │ ... │
└──────────────┴───────────────────────────────┴───────────────┘
💡 PowerShell est le moyen le plus puissant de gérer Hyper-V. Toutes les opérations du gestionnaire graphique sont disponibles en PowerShell, et bien plus encore !
# Importer le module (normalement chargé automatiquement)
Import-Module Hyper-V
# Voir toutes les commandes disponibles pour Hyper-V
Get-Command -Module Hyper-V
# Lister toutes les machines virtuelles
Get-VM
# Lister seulement les VM en cours d'exécution
Get-VM | Where-Object { $_.State -eq "Running" }
# Voir les détails d'une VM spécifique
Get-VM -Name "MaVM"
# Voir la configuration matérielle d'une VM
Get-VMHardDiskDrive -VMName "MaVM"
Get-VMMemory -VMName "MaVM"
Get-VMProcessor -VMName "MaVM"
Get-VMNetworkAdapter -VMName "MaVM"
# Créer une VM simple avec les paramètres de base
New-VM `
-Name "MaPremiereVM" `
-MemoryStartupBytes 2GB `
-Generation 2 `
-Path "C:\VMs"
# Créer un disque dur virtuel pour cette VM
New-VHD `
-Path "C:\VMs\MaPremiereVM\disque.vhdx" `
-SizeBytes 60GB `
-Dynamic
# Attacher le disque à la VM
Add-VMHardDiskDrive `
-VMName "MaPremiereVM" `
-Path "C:\VMs\MaPremiereVM\disque.vhdx"
# Attacher une image ISO pour installer l'OS
Add-VMDvdDrive `
-VMName "MaPremiereVM" `
-Path "C:\ISO\Windows11.iso"
# Connecter la VM au réseau virtuel
Connect-VMNetworkAdapter `
-VMName "MaPremiereVM" `
-SwitchName "Default Switch"
Write-Host "VM créée avec succès !" -ForegroundColor Green
# Démarrer une VM
Start-VM -Name "MaPremiereVM"
# Arrêt propre (comme cliquer sur Démarrer > Arrêter dans la VM)
Stop-VM -Name "MaPremiereVM"
# Arrêt forcé (comme appuyer sur le bouton power)
Stop-VM -Name "MaPremiereVM" -Force
# Redémarrer une VM
Restart-VM -Name "MaPremiereVM"
# Mettre en pause une VM (économise du CPU)
Suspend-VM -Name "MaPremiereVM"
# Reprendre une VM en pause
Resume-VM -Name "MaPremiereVM"
# Vérifier l'état d'une VM
(Get-VM -Name "MaPremiereVM").State
# Modifier la RAM (la VM doit être arrêtée pour certains changements)
Set-VMMemory -VMName "MaPremiereVM" -StartupBytes 4GB
# Activer la mémoire dynamique
Set-VMMemory `
-VMName "MaPremiereVM" `
-DynamicMemoryEnabled $true `
-MinimumBytes 1GB `
-StartupBytes 2GB `
-MaximumBytes 8GB
# Modifier le nombre de processeurs virtuels
Set-VMProcessor -VMName "MaPremiereVM" -Count 4
# Renommer une VM
Rename-VM -Name "MaPremiereVM" -NewName "Serveur-Web-01"
# Arrêter la VM avant de la supprimer
Stop-VM -Name "MaPremiereVM" -Force
# Supprimer la VM (ne supprime PAS les fichiers disque)
Remove-VM -Name "MaPremiereVM"
# Supprimer la VM ET ses fichiers disque (attention !)
Remove-VM -Name "MaPremiereVM" -Force
# Puis supprimer manuellement les fichiers VHDX si nécessaire
Remove-Item "C:\VMs\MaPremiereVM" -Recurse -Force
⚠️ Attention :
Remove-VMsans-Forcedemandera une confirmation. Avec-Force, la suppression est immédiate et irréversible.
Voici un script complet et commenté pour créer une VM de A à Z :
# ============================================
# Script : Créer une VM Hyper-V automatiquement
# ============================================
# Variables — modifiez ces valeurs selon vos besoins
$VMName = "Serveur-Test-01"
$VMPath = "C:\VMs"
$RAMSize = 2GB
$DiskSize = 40GB
$Generation = 2
$SwitchName = "Default Switch"
$ISOPath = "C:\ISO\WindowsServer2022.iso"
# Étape 1 : Vérifier que la VM n'existe pas déjà
if (Get-VM -Name $VMName -ErrorAction SilentlyContinue) {
Write-Host "Une VM '$VMName' existe déjà." -ForegroundColor Yellow
exit
}
# Étape 2 : Créer la VM
Write-Host "Création de la VM '$VMName'..." -ForegroundColor Cyan
New-VM -Name $VMName -MemoryStartupBytes $RAMSize -Generation $Generation -Path $VMPath
# Étape 3 : Créer le disque virtuel
$VHDPath = "$VMPath\$VMName\$VMName.vhdx"
Write-Host "Création du disque virtuel..." -ForegroundColor Cyan
New-VHD -Path $VHDPath -SizeBytes $DiskSize -Dynamic
# Étape 4 : Attacher le disque
Add-VMHardDiskDrive -VMName $VMName -Path $VHDPath
# Étape 5 : Attacher l'ISO
if (Test-Path $ISOPath) {
Add-VMDvdDrive -VMName $VMName -Path $ISOPath
Write-Host "ISO attaché." -ForegroundColor Cyan
} else {
Write-Host "ISO introuvable : $ISOPath" -ForegroundColor Yellow
}
# Étape 6 : Connecter au réseau
Connect-VMNetworkAdapter -VMName $VMName -SwitchName $SwitchName
# Étape 7 : Démarrer la VM
Start-VM -Name $VMName
Write-Host "VM '$VMName' créée et démarrée avec succès !" -ForegroundColor Green
Get-VM -Name $VMName | Select-Object Name, State, MemoryAssigned, CPUUsage
| Type | Description | Accès Internet | Accès à l'hôte |
|---|---|---|---|
| Externe | Connecté à la carte réseau physique | ✅ Oui | ✅ Oui |
| Interne | Réseau entre VM et l'hôte uniquement | ❌ Non | ✅ Oui |
| Privé | Réseau entre VM uniquement | ❌ Non | ❌ Non |
💡 Pour un lab de test isolé, utilisez un switch Privé. Pour des VM qui ont besoin d'Internet, utilisez Externe.
# Lister tous les commutateurs virtuels existants
Get-VMSwitch
# Créer un commutateur externe (accès Internet)
# Trouver d'abord le nom de votre carte réseau physique
Get-NetAdapter
# Créer le switch externe
New-VMSwitch `
-Name "Switch-Externe" `
-NetAdapterName "Ethernet" `
-AllowManagementOS $true
# Créer un commutateur interne
New-VMSwitch -Name "Switch-Interne" -SwitchType Internal
# Créer un commutateur privé (VM isolées)
New-VMSwitch -Name "Switch-Prive" -SwitchType Private
# Connecter une VM à un switch
Connect-VMNetworkAdapter -VMName "MaVM" -SwitchName "Switch-Externe"
# Supprimer un switch
Remove-VMSwitch -Name "Switch-Prive"
Un snapshot (ou point de contrôle) est une capture de l'état complet d'une VM à un instant T : son contenu mémoire, l'état du disque et sa configuration. Il permet de revenir en arrière si quelque chose tourne mal.
💡 Exemple d'usage : avant d'installer une mise à jour risquée ou de faire des modifications importantes sur une VM, prenez un snapshot. Si l'opération échoue, restaurez le snapshot en quelques secondes.
⚠️ Les snapshots ne remplacent pas une vraie sauvegarde ! Ils sont stockés sur le même disque que la VM.
# Créer un snapshot (point de contrôle)
Checkpoint-VM -Name "MaVM" -SnapshotName "Avant-MiseAJour"
# Lister tous les snapshots d'une VM
Get-VMSnapshot -VMName "MaVM"
# Restaurer un snapshot (revenir en arrière)
# La VM doit être arrêtée
Stop-VM -Name "MaVM" -Force
Restore-VMSnapshot -VMName "MaVM" -Name "Avant-MiseAJour"
# Démarrer la VM après restauration
Start-VM -Name "MaVM"
# Supprimer un snapshot (libère de l'espace disque)
Remove-VMSnapshot -VMName "MaVM" -Name "Avant-MiseAJour"
# Supprimer TOUS les snapshots d'une VM
Get-VMSnapshot -VMName "MaVM" | Remove-VMSnapshot
# Scénario : appliquer des mises à jour Windows sur une VM serveur
$VMName = "Serveur-Prod-01"
$SnapshotName = "Avant-MiseAJour-$(Get-Date -Format 'yyyyMMdd')"
# 1. Créer un snapshot avant toute modification
Write-Host "Création du snapshot de sécurité..." -ForegroundColor Cyan
Checkpoint-VM -Name $VMName -SnapshotName $SnapshotName
# 2. Lister les snapshots pour confirmer
Get-VMSnapshot -VMName $VMName | Select-Object Name, CreationTime
Write-Host "Snapshot '$SnapshotName' créé. Vous pouvez maintenant procéder aux modifications." -ForegroundColor Green
Write-Host "En cas de problème, restaurez avec : Restore-VMSnapshot -VMName '$VMName' -Name '$SnapshotName'" -ForegroundColor Yellow
C:\VMs\
├── Serveur-Web-01\
│ ├── Serveur-Web-01.vhdx ← Disque principal
│ └── Snapshots\ ← Snapshots automatiques
├── Serveur-BDD-01\
│ └── Serveur-BDD-01.vhdx
└── VM-Test\
└── VM-Test.vhdx
# Définir un chemin par défaut pour toutes les VM
Set-VMHost -VirtualMachinePath "D:\VMs" -VirtualHardDiskPath "D:\VMs\Disques"
# Voir la configuration actuelle de l'hôte Hyper-V
Get-VMHost | Select-Object VirtualMachinePath, VirtualHardDiskPath, LogicalProcessorCount, MemoryCapacity
# Vue d'ensemble de toutes les VM et leur état
Get-VM | Select-Object Name, State, MemoryAssigned, CPUUsage | Format-Table -AutoSize
# Voir l'espace utilisé par tous les disques virtuels
Get-VM | Get-VMHardDiskDrive | ForEach-Object {
$vhd = Get-VHD -Path $_.Path
[PSCustomObject]@{
VM = $_.VMName
Disque = $_.Path
"Taille (Go)" = [math]::Round($vhd.Size / 1GB, 1)
"Utilisé (Go)" = [math]::Round($vhd.FileSize / 1GB, 1)
}
} | Format-Table -AutoSize
# Voir les ressources consommées en temps réel
Get-VM | Where-Object { $_.State -eq "Running" } |
Select-Object Name, CPUUsage, MemoryAssigned, Uptime |
Format-Table -AutoSize
| Action | Commande |
|---|---|
| Lister les VM | Get-VM |
| Créer une VM | New-VM -Name "..." -MemoryStartupBytes 2GB |
| Démarrer une VM | Start-VM -Name "..." |
| Arrêter une VM | Stop-VM -Name "..." |
| Redémarrer une VM | Restart-VM -Name "..." |
| Créer un disque | New-VHD -Path "..." -SizeBytes 40GB -Dynamic |
| Créer un snapshot | Checkpoint-VM -Name "..." -SnapshotName "..." |
| Restaurer un snapshot | Restore-VMSnapshot -VMName "..." -Name "..." |
| Lister les snapshots | Get-VMSnapshot -VMName "..." |
| Lister les vSwitch | Get-VMSwitch |
| Créer un vSwitch | New-VMSwitch -Name "..." -SwitchType Internal |
| Supprimer une VM | Remove-VM -Name "..." |
| Infos sur l'hôte | Get-VMHost |
Get-WindowsOptionalFeatureGet-VMGet-VMSwitch"Lab-Interne""VM-Lab-01" avec 2 Go de RAM et un disque de 20 Go"Lab-Interne"Get-VM et Get-VMHardDiskDrive"Etat-Initial"Get-VMSnapshotÉcrivez un script PowerShell qui :
"VM-01", "VM-02", "VM-03" avec une boucle forGet-VM à la finBonne virtualisation ! 🖥️