Générateur PowerShell Hyper-V

Coche deux ou trois cases, récupère un script PowerShell Hyper-V que tu peux coller et lancer. Crée des VMs, branche les virtual switches, gère les checkpoints.

Ce générateur PowerShell Hyper-V transforme quelques cases cochées en un script que tu colles direct dans une console et que tu lances. Choisis le mode VM et il recoud toute la chaîne, New-VM pour la coquille, Set-VM pour le CPU et la Dynamic Memory, Set-VMFirmware pour le Secure Boot et l'ordre de boot, Add-VMDvdDrive pour une ISO d'install, et Start-VM pour l'allumer. Bascule en mode virtual switches pour les one-liners External, Internal et Private, ou en mode checkpoints pour prendre un snapshot et revenir en arrière. Chaque ligne arrive avec une note sur ce qu'elle fait, et les presets couvrent un lab Kali, une cible Windows, un hôte nested et un serveur Linux. Tout tourne dans ton navigateur, donc rien de ce que tu saisis ne quitte la page.

100% dans votre navigateur. Rien de ce que vous tapez ne quitte cette page.

Hyper-V PowerShell generator

Personne ne retient par cœur tous les flags de New-VM. J'ai arrêté de faire semblant. D'où ce truc. Tu coches deux ou trois cases et tu récupères un script Hyper-V que tu colles direct, tu lances une VM, tu branches des vSwitches, tu joues avec les checkpoints, et chaque ligne arrive avec une petite note qui explique à quoi elle sert. Franchement, c'est surtout quand je monte un lab CTF à l'arrache et que j'ai la flemme de tout taper que j'y reviens. Ça tourne dans ton navigateur. Rien de ce que tu saisis ne quitte la page.

Ce que fait ce Hyper-V PowerShell generator

Cliquer dans Hyper-V Manager, ça va très bien pour une machine que tu ne retoucheras jamais. Très bien, OK. Mais dès que je veux un lab que je peux démolir et reconstruire sur un coup de tête, je reviens dans PowerShell. Et voilà le truc que personne ne mentionne : un vrai build de VM, ce n'est jamais une seule commande. T'as New-VM pour la coquille. Ensuite Set-VM et Set-VMProcessor pour le CPU et la mémoire, Set-VMFirmware pour le Secure Boot et l'ordre de boot, peut-être Add-VMDvdDrive s'il y a une ISO, et enfin Start-VM pour l'allumer. Cet outil recoud tout ce bazar à partir de ce que tu coches, te file un script qui tourne du début à la fin, et te dit ce que fait chaque ligne.

Les deux autres trucs que je finis par scripter en boucle sont là aussi. Les types de switch (External, Internal, Private) qui décident à quel point chaque VM est cloisonnée. Et les checkpoints, pour qu'il y ait toujours un point propre où revenir quand une expérience part en vrille.

Pourquoi scripter Hyper-V plutôt que cliquer

  • Reproductibilité. Je flingue des VMs en permanence. Le script reconstruit la même en quelques secondes, et je ne reste jamais à me demander ce que j'avais choisi la dernière fois.
  • Vitesse. Cinq VMs ? C'est une boucle. La même chose dans l'assistant, c'est vingt minutes que je ne récupère pas.
  • Documentation. Le script est la trace de la façon dont cette VM a été construite. Glisse-le dans git à côté du reste de ton infra et ton toi-du-futur te dira merci.
  • Cohérence. Mêmes Secure Boot, mémoire et switch sur chaque machine, à chaque fois. Ça tue le casse-tête du « mais ça marche sur cette VM-là » avant même qu'il commence.

Les cmdlets derrière un build de VM

CmdletRôle
New-VMLe point de départ : fixe la génération et la mémoire de démarrage, pointe sur un VHDX neuf ou existant, et raccorde un switch.
Set-VMUne fois la VM créée, c'est ici que je règle le nombre de vCPU et le plancher et le plafond de la Dynamic Memory.
Set-VMFirmwareGen 2 uniquement. Active ou désactive le Secure Boot et décide ce sur quoi la VM boote en premier.
Set-VMProcessorExpose les extensions de virtualisation pour que tu puisses faire tourner un hyperviseur dans la VM (nested).
Add-VMDvdDriveBoulonne une ISO d'install sur la VM pour qu'elle ait de quoi démarrer l'installeur.
Start-VM / Checkpoint-VML'un allume la machine ; l'autre prend un checkpoint nommé sur lequel tu pourras revenir plus tard.

Virtual switches et isolation

Le type de switch décide jusqu'où une VM peut aller. C'est tout l'enjeu. Un switch External bridge une NIC physique, donc tes VMs ont un vrai réseau et un chemin vers Internet. Un switch Internal laisse l'hôte et les VMs discuter entre eux et rien au-delà de ta machine. Un switch Private est encore plus strict : les VMs ne parlent qu'entre elles, pas d'hôte, pas d'Internet, nulle part où téléphoner à la maison. Ce dernier, c'est là que je balance tout ce en quoi je n'ai pas confiance. Échantillons de malware, une cible que je titille, ce genre de choses. Le mode switch ici écrit les trois et tu supprimes les lignes dont tu ne veux pas.

Confidentialité et fonctionnement de cet outil

La construction du script tourne en JavaScript, directement dans ton navigateur. Tes noms de VM, tes chemins, tes réglages ? Rien de tout ça n'est envoyé où que ce soit ni journalisé. Une fois la page chargée, tu peux débrancher ton câble réseau et ça continue de marcher.

Sources et pour aller plus loin

Questions fréquentes

Comment créer une VM Hyper-V en PowerShell ?

Commence par New-VM -Name "lab" -Generation 2 -MemoryStartupBytes 4GB -NewVHDPath "D:\VMs\lab.vhdx" -NewVHDSizeBytes 60GB -SwitchName "Internal". Ça, c'est la coquille. Ensuite donne-lui des cœurs avec Set-VM -Name "lab" -ProcessorCount 2, règle le firmware avec Set-VMFirmware, et Start-VM pour booter. Pas envie de taper tout ça ? Le generator ci-dessus écrit toute la chaîne.

Comment désactiver le Secure Boot pour une VM Linux ?

La plupart des ISO Linux s'étranglent sur le Secure Boot. Donc sur une VM Gen 2, je le coupe direct : Set-VMFirmware -VMName "lab" -EnableSecureBoot Off. Tu veux le garder activé ? Pointe-le sur le template Linux avec -SecureBootTemplate MicrosoftUEFICertificateAuthority et la plupart des distros modernes arrêtent de râler. Les VMs Gen 1 n'ont pas de Secure Boot du tout, donc rien à basculer de ce côté.

Comment activer la nested virtualization ?

Éteins d'abord la VM. Ça ne passera pas sur une machine en marche, je l'ai appris à mes dépens. Ensuite lance Set-VMProcessor -VMName "lab" -ExposeVirtualizationExtensions $true et coupe la Dynamic Memory pour elle. Maintenant tu peux faire tourner Hyper-V, WSL2 ou Docker dans la VM. C'est comme ça que je monte un hyperviseur jetable sans jamais toucher à l'hôte.

Quelle différence entre un checkpoint standard et un checkpoint production ?

Pas la même chose, et l'écart pique les gens. Un checkpoint production s'appuie sur le VSS de l'invité pour un snapshot cohérent au niveau applicatif, en gros une vraie sauvegarde, donc les bases de données et compagnie restent propres. Un checkpoint standard capture tout l'état de la machine, mémoire comprise, donc tu retombes exactement là où tu étais. Parfait pour un lab, pas ce que tu veux pour des données en prod. Choisis avec Set-VM -CheckpointType.