Tags: Hyper-V, PowerShell, Cluster
Wenn man mehrere gleiche VMs erzeugen muss und diese stark von den Vorgaben des Wizards im Hyper-V Manager abweichen, dann artet dies in viel Klickarbeit aus. Alternativ bietet PowerShell für diesen Zweck Cmdlets, die virtuelle Hardware wie Netzwerkadapter oder VHDs hinzufügen und konfigurieren können.
Die Anforderung, mehrere gleiche VMs zu erstellen, ergibt sich zum Beispiel, wenn man virtuelle Instanzen von Windows Server zu einem Cluster zusammenschließen möchte. Eine typische Anwendung dafür ist der Aufbau einer Lab-Umgebung. Die folgende Anleitung spielt das Vorgehen am Beispiel von Azure Stack HCI durch, das sich so auf einer einzelnen Maschine evaluieren lässt.
Grundsätzlich könnte man in einem solchen Fall einfach eine VM manuell konfigurieren und dann klonen. Der Hyper-V Manager besitzt zwar keine explizite Funktion für diese Aufgabe, aber seit einiger Zeit ist das Windows Admin Center dazu in der Lage. Neue VMs, automatisch erzeugt durch PowerShell, sind aber wahrscheinlich die sauberere Lösung.
VM erzeugen und anpassen
Im ersten Schritt kreiert man die virtuelle Maschine, wobei der Aufruf davon abhängt, ob die VHD dafür schon existiert. Trifft dies zu, dann teilt man New-VM den Pfad zum virtuellen Laufwerk über den Parameter VHDPath mit. Wir gehen hier davon aus, dass noch keine VHD existiert und wir diese erst nachträglich installieren:
New-VM -Name ASHCI03 -NoVHD -Path "F:\Hyper-V\" -Generation 2
Nachdem die VM angelegt ist, kann man diese mit Set-VM konfigurieren. Der folgende Aufruf legt die Zahl der vCPUs und das verfügbare vRAM fest. Außerdem deaktiviert er Snapshots, darunter auch die in Windows 10 üblichen automatischen Prüfpunkte. Da Azure Stack HCI die Nested Virtualization nutzt, verzichten wir auch auf Dynamic Memory:
Set-VM -Name ASHCI03 -ProcessorCount 4 -StaticMemory `
-MemoryStartupBytes 8GB -CheckpointType Disabled
Nun steht die Konfiguration der vNICs an. Beim Erzeugen erhält die VM automatisch einen Netzadapter. Dessen Namen kann man mit
$NicName = (Get-VMNetworkAdapter -VMName ASHCI03).Name
in der Variablen $NicName speichern.
Den vom System vorgegebenen Namen des Adapters benötigen wir, da wir alle NICs nach einer festen Konvention benennen. Mit diesem Befehl erhält er die neue Bezeichnung vNIC01:
Rename-VMNetworkAdapter -Name $NicName -VMName ASHCI03 -NewName vNIC01
Netzadapter erstellen und verbinden
Microsofts Empfehlung für Azure Stack HCI sieht vier vNICs für die virtuelle Maschine vor. Die noch fehlenden drei lassen sich wie folgt erzeugen:
2 .. 4 | foreach {Add-VMNetworkAdapter -VMName ASHCI03 -Name vNIC0$_}
Diese sollten an vSwitch vom Typ External gebunden werden.
Folgender Aufruf bindet alle vier vNICs an einen virtuellen Switch, der in unserem Beispiel Extern heißt:
1 .. 4 | foreach {Connect-VMNetworkAdapter -Name vNIC0$_ `
-SwitchName "Extern" -VMName ASHCI03}
Nachdem in Azure Stack HCI der Hypervisor aktiviert werden soll, muss man für die Nested Virtualization das Spoofing der Mac-Adressen erlauben:
1 .. 4 | foreach {Set-VMNetworkAdapter -VMName ASHCI03 -Name vNIC0$_ `
-MacAddressSpoofing On}
Bei dieser Gelegenheit kann man gleich eine weitere dafür nötige Voraussetzung schaffen, nämlich die Virtualisierungserweiterungen der CPU in der VM sichtbar zu machen:
Set-VMProcessor -VMName ASHCI03 -ExposeVirtualizationExtensions $true
Laufwerke anlegen und zuordnen
Azure Stack HCI benötigt neben dem Datenträger für das System noch mindestens zwei weitere für die Storage Spaces Direct. Diese erstellt man mit dem Cmdlet New-VHD:
1 .. 3 | foreach {New-VHD -Path `
"F:\Hyper-V\ASHCI03\Virtual Hard Disks\ASHCI03-0$_.vhdx" -Dynamic -SizeBytes 20GB}
Die drei VHDX bindet man dann mit diesem Befehl an die virtuelle Maschine:
1 .. 3 | foreach {Add-VMHardDiskDrive -Path `
"F:\Hyper-V\ASHCI03\Virtual Hard Disks\ASHCI03-0$_.vhdx" -VMName "ASHCI03"}
Zum Schluss ordnet man der VM die Installationsmedien über ein virtuelles DVD-Laufwerk zu:
Add-VMDvdDrive -VMName ASHCI02 -Path F:\AzureStackHCI_17784.1408_EN-US.iso
Damit die VM dann auch vom DVD-Laufwerk bootet, stellt man die Boot-Reihenfolge entsprechend um:
$dvd = Get-VMDvdDrive -VMName ASHCI03
Set-VMFirmware ASHCI03 -FirstBootDevice $dvd
Die neue VM ist nun startklar für die Installation des Betriebssystems. Falls sich dann Hyper-V in Azure Stack HCI nicht aktivieren lässt, kann man das Feature offline in der VHDX aktivieren.
Für eine effizientere Nutzung kann man die oben beschriebenen Anweisungen zu einer Funktion zusammenfassen, der man den Namen der neuen VM als Parameter übergibt.
Bei Bedarf setzt man etwa für die verwendeten Pfade ebenfalls eine Variable ein, die man als weitere Argumente beim Aufruf angibt.
Täglich Know-how für IT-Pros mit unserem Newsletter
Ähnliche Beiträge
- Knoten zu einem Hyper-V-Cluster mit Windows Admin Center hinzufügen
- Hochverfügbare VMs im Hyper-V-Cluster erstellen mit dem Windows Admin Center
- Updates für Server-Cluster mit Windows Admin Center installieren
- Hyper-V-Cluster erstellen mit dem Windows Admin Center
- PowerShell-Remoting, Hyper-V Manager: Fehler wegen Netzwerkverbindungstyp "Öffentlich"
Weitere Links