Hyper-V: Virtuelle Computer in bestimmter Reihenfolge starten und herunterfahren

Im Gegensatz zu VMware’s ESX(i) gibt es bei Microsoft’s Hyper-V ab Werk und ohne Zusätze keine grafische Möglichkeit die Start- oder Herunterfahren-Reihenfolge von virtuellem Computern festzulegen.

Mit Bordmitteln gelingt das Vorhaben dank einfacher Skripte dennoch. Das Ausgangsszenario ist der monatliche Patchday. Alle virtuellen Computer inkl. dem Host gleichzeitig herunterzufahren oder neu zu starten ist keine gute Idee, geht dies mindestens auf die (Gesamt-)Performance und führt häufig zu Schwierigkeiten bei der Netzwerkkategorie (Stichwort: Öffentlich statt Domänennetzwerk).

Das Herunterfahren und den Host-Neustart kann man z.B. so regeln:

@echo off

rem SRV02, SRV03 und WTS03 per Integrationsdienste herunterfahren

powershell Stop-VM -Name 'WTS01' -Force
powershell Stop-VM -Name 'SRV03' -Force
powershell Stop-VM -Name 'SRV02' -Force

rem SRV01 per shutdown-Befehl herunterfahren

net use \\192.168.2.10 "Kennwort" /user:"Domäne\administrator" /persistent:no
shutdown /m \\192.168.2.10 /s /f /t 0
net use \\192.168.2.10 /d

rem Pruefen, ob der virtuelle Computer heruntergefahren wurde

:check
timeout /t 15 /nobreak
powershell Get-VM | find "Running" | find /i "SRV01"
if %Errorlevel%==0 goto check

rem Statusdatei schreiben

echo Start VMs > "C:\Users\Administrator\Dokumente\Hyper-V\VMstart.txt"

rem HV01 neu starten

shutdown -r -f -t 30

In diesem Beispiel werden zunächst die virtuellen Computer mit aktiven und funktionierenden Integrationsdiensten heruntergefahren, dann folgt noch Einer ohne Integrationsdienste und schließlich wird der Host neu gestartet.

Damit nach dem Neustart der Host weiß das er die virtuellen Computer wieder starten soll, wird eine Statusdatei erstellt.

Dieses Skript wird als Aufgabe zu einem festgelegtem Zeitpunkt ausgeführt, beispielsweise über Nacht.

Eine weitere Aufgabe prüft beim Starten des Hosts, ob eine Statusdatei exisitiert und wenn dies der Fall ist, werden die virtuellen Computer in der angegebenen Reihenfolge gestartet:

@echo off

rem Status-Datei pruefen

if not exist "C:\Users\Administrator\Dokumente\Hyper-V\VMstart.txt" exit

rem SRV01 und SRV02 starten

powershell Start-VM -name 'SRV01'
timeout /t 360 /nobreak

powershell Start-VM -name 'SRV02'
timeout /t 360 /nobreak

rem SRV03 und WTS03 starten

powershell Start-VM -name 'SRV03'
timeout /t 360 /nobreak

powershell Start-VM -name 'WTS01'

rem Status-Datei entfernen

del "C:\Users\Administrator\Dokumente\Hyper-V\VMstart.txt" /q

Tipp: Die “Start”-Aufgabe um min. eine Minute verzögern, damit es zu keinen Schwierigkeiten kommt.

Ggf. muss man die Pause-Zeiten zwischen den Startvorgängen anpassen, das kommt ganz darauf an, wie lange im Durchschnitt die virtuellen Computer zum Starten benötigen.

In der Praxis, ganz gleich ob mit oder ohne die Installation von Windows Updates hat sich 360 Sekunden, also fünf Minuten, bewährt. Die einzige Ausnahme stellen dabei virtuelle Computer mit Windows Server 2016 dar, die leider unglaublich lange für den Windows Update bedingten Neustart benötigen.

6 Kommentare

  • Pingback: Windows Server 2019: Memory Leak? – Andy's Blog

  • Hallo Andy,
    bzgl deines obigen Artikel folgende Anmerkung. Hyper-V kann VMs in einer definierten Reihenfolge automatisch starten, nur ist das leider etwas versteckt.
    VM – Einstellungen – Automatische Startaktion – Immer automatisch starten – Startverzögerung in Sekunden einstellen.

    Nicht so schön übersichtlich, wie bei ESXi, aber trotzdem machbar.
    1. VM: z.Bsp. 30sec
    2. VM: z.Bsp. 60sec
    3. VM: z.Bsp. 90sec
    4. VM: z.Bsp. 120sec
    etc.

  • Zeitverzögerungen zu nutzen ist eher Problematisch. Ich kann nicht genau sagen, wie lange die VM nach einem Update braucht um wieder voll hochgefahren zu sein. mit Powershell gibt es seit einigen Jahren da bessere Funktionen.

  • S. Messerschmidt

    Eine Frage wenn es gestattet ist=
    Ich habe einen Server in dem lediglich zwei Maschinen virtuell laufen und diese auch in der Nacht per Powershell ausschalte und in der Früh wieder per Powershell starte= und nur bei einem Server (2019STD), ist es so, dass beim Starten in der Früh, eines der Hyperv Betriebssysteme das Betriebssystem Auswahl Menü (schwarz weiss) erscheint und man einmalig die Enter Taste betätigen muss, damit der Server anfährt. GIbt es hierbei eine Idee? Scheint irgendwie nicht mitzukriegen dass der Server regulär heruntergefahren wurde, aber nur diese eine Maschine. Befehl in der Nacht lautet “Get-VM | where {$_.State -eq ‘Running’} | Stop-VM” Der schaltet alles aus.
    In der Früh ist der Befehl = “Start-VM -Name SERVER2019STD”, immer jeweils ohne die Anführungszeichen.
    Gruß

  • Hänge beim Herunterfahren mal “-Force” mit an, damit der Befehl z.B. so aussieht:

    powershell Stop-VM -Name '' -Force

    Vermutlich wird die VM sonst nicht heruntergefahren, sondern einfach “abgewürgt” und dann kommt es zu Schwierigkeiten.
    Hintergrund kann sein, das ein Benutzer (Administrator, …) am Desktop angemeldet ist und dann das Herunterfahren explizit zu bestätigen ist.

    Falls es daran nicht liegen sollte, müsste man ggf. mal an die BCD-Einstellungen ran.

  • S. Messerschmidt

    Hmm, tatsächlich das könnte was sein. Habe das grad geprüft. Da ist eine Anomalie.
    Tatsächlich wird in der HyperV in der ersten Startreihenfolge eine Windows Boot Manager. efi Datei zum Starten verwendet. Ganz anders als zu allen meinen anderen Servern die nie ein Problem mit der nächtlichen Abschaltung/Starterei haben, die aus der SystemPlatte starten. Muss sich irgendwann eingeschlichen haben.
    Ich verändere mal die Startreihenfolge und wähle anstelle die *.efi Datei, die Systemfestplatte, wie bei all den anderen auch. Melde mich wieder nachdem ich das paar Tage beobachtet habe.
    Wenn es das wäre, wäre es der Knüller.
    Gruß und Danke, sonst hätte ich da nie hingeschaut.
    Messerschmidt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.