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.
Verheiratet, Vater von zwei Kindern, eines an der Hand, eines im Herzen. Schon immer Technik-Freund, seit 2001 in der IT tätig und seit über 10 Jahren begeisterter Blogger. Mit meiner Firma IT-Service Weber kümmern wir uns um alle IT-Belange von gewerblichen Kunden und unterstützen zusätzlich sowohl Partner als auch Kollegen.
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.
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.
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.