Hyper-V Sicherung mittels Powershell Skript für Windows Server 2016 (Update 2) | Hyper-V Server Blog

Hyper-V Sicherung mittels Powershell Skript für Windows Server 2016 (Update 2)

Nach dem großen Erfolg von dem Backup-Skript für ein Backup von VMs unter Windows Server 2012 mit Hilfe der PowerShell und einem Export der virtuellen Maschine sowie der stetigen Nachfrage nach einem Nachfolger für Windows Server 2016 habe ich nun (nach langer Zeit) das Skript angepasst und für Windows Server 2016 optimiert. Grundsätzlich ist es mit dem Skript möglich, eine virtuelle Maschine (manuell oder zeitgesteuert per geplantem Task) zu exportieren. Dieser Export kann online gemacht werden, alternativ kann die VM dabei gespeichert oder vollständig heruntergefahren werden. Der Vorgang wird protokolliert, auf Wunsch kann dieses Protokoll auch noch per Mail versandt werden.

Update auf Version 0.4.1 – 06. Mai 2017

 

Ich habe heute das Script so umgeschrieben, dass das interne PowerShell-Logging genutzt wird. Dies bewirkt ein paar Zeilen weniger Code und ein sauberes Logging inkl. möglicher Fehler und weiteren Informationen. Man lernt nie aus :)

Wichtig: An der Funktion hat sich nichts geändert, v0.4.1 funktioniert technisch genau so wie v0.4. Wird das Script ausgetauscht, muss keine Syntax angepasst oder geändert werden.

Update auf Version 0.4 – 17. Dezember 2016

Ich habe heute das Skript mit einer weiteren Funktion ausgestattet. Auf Wunsch kann nun ein Checkpoint erstellt werden, nach der Erstellung wird dieser Checkpoint exportiert. Nach dem Export wird der Checkpoint wieder entfernt.

Grund für diese Erweiterung ist die Tatsache, dass ein direkter Export einer VM im Livebetrieb kein Production Checkpoint erstellt, sondern einen “gewöhnlichen”. Dies ist daran erkennbar, dass die VM nach einem Export und einem erneuten Import im gespeicherten Zustand vorliegt. Würde ein Production Checkpoint erstellt, ist die VM nach dem erneuten Import ausgeschaltet, da das OS in der VM per VSS-Technik benachrichtigt wird.

Weitere Informationen zum Thema Production Checkpoint

Das Skript selbst überprüft nicht, ob ein Production Checkpoint gemacht werden kann, dies müssen Sie selbst überprüfen!

Am einfachsten können Sie dies manuell machen. Bei einem erfolgreichen Production Checkpoint bekommen Sie dies angezeigt.

Das Archiv enthält das eigentliche Skript sowie eine Hilfe-Datei mit Informationen zur Nutzung. Achten Sie unbedingt darauf, dass Sie das Skript nach dem Download entsperren. Dies geschieht über die Eigenschaften des Dokuments, im unteren Bereich finden Sie ggf. eine Warnung, dass es sich um eine Datei aus dem Internetz handelt und Sie diese erst manuell freigeben müssen.

Wichtiger Hinweis: Es handelt sich bei virtuellen Systemen meist um wichtige Daten. Prüfen Sie die Nutzung des Scripts vorab an Test- oder Demo-Daten. Wir übernehmen keine Haftung für verlorene oder inkonsistente Dateien oder VMs sowie sonstigen Fehlern oder Problemen. Sie können sich jederzeit den Quelltext des Scripts anschauen und nachvollziehen, was mit den einzelnen Befehlen bewirkt wird. Die Nutzung dieses Scripts erfolgt auf eigene Gefahr!

Beschreibung der Funktion

Dieses Script exportiert manuell oder per Taskplaner jeweils eine VM. Standardmäßig wird die VM online exportiert.
Die VM wird alternativ je nach Wunsch gespeichert oder heruntergefahren, die Möglichkeit eines sauberen Shutdown wird getestet,
indem die Integrationskomponente “Herunterfahren” bzw “Shutdown” abgefragt wird. Dies ist jedoch keine 100%ige Gewährleistung auf eine
vollständige und zuverlässige Unterstützung von einem Shutdown-Vorgang von außerhalb.
Weiterhin kann ein Production Checkpoint erstellt und exportiert werden. Bei diesem Vorgang wird neben einem Checkpoint noch in der VM ein
VSS-Snapshot erzeugt. Dies setzt die VM in einen konsistenten Zustand, die Daten der VM sollten so konsistent gesichert werden.
Wichtig: Die Funktion des Production Checkpoints wird nicht überprüft, dies muss von Ihnen aus konfiguriert werden!
Wenn die Shutdown-Funktion nicht verfügbar ist und kein Speichern der VM ausgewählt wurde, wird das Script beendet. Falls die Komponente aktiviert ist
kann die VM versucht werden, per “Herunterfahren” von außen sauber heruntergefahren zu werden. Hierbei wird per Parameter ein
Herunterfahren erzwungen, zum Zeitpunkt offene Dateien verzögern den Vorgang, die VM wird nach einer gewissen Zeit aber trotzdem heruntergefahren.
Sie können einen Pfad auswählen, in dem die Logdatei der Sicherung erstellt wird. Wenn kein Parameter angegeben wird, werden die Logfiles
im Windows-Log-Verzeichnis (per Standard C:WindowsLogs) im Unterordner “HyperVExport” erstellt. Falls dieser Ordner nicht vorhanden ist, wird
der Ordner erstellt, falls er bereits vorhanden ist wird die Logdatei hier angelegt und gespeichert. Pro Tag wird ein eigenes Logfile erstellt,
wenn an einem Tag mehrere Aktionen stattfinden werden die Ereignisse in diesem einem Log hintereinander protokolliert, es wird kein Log überschrieben.
Auf Wunsch kann ein anderer Pfad für die Datei angegeben werden.
Wichtig: Standardmäßig werden die vorhandenen Export-Datei vor einem erneuten Export gelöscht.
Auf Wunsch können Sie sich das Logfile nach der Sicherung per Email schicken lassen. Hierzu ist eine Anpassung des Scripts notwendig, siehe unten.

Die Funktionsweise des Skripts wurde mit einem englischen Windows Server 2016 mit dem Dezember 2016 Patchlevel getestet.

Beispiele

Einfacher Export einer VM ohne weitere Optionen:

Export.ps1 -VM -Exportpfad D:Exports

Speichern einer VM und Export:

Export.ps1 -VM -Exportpfad D:Exports -Speichern

Erzeugen von Checkpoint, Export des Checkpoints und Löschen von Checkpoint

Export.ps1 -VM -Exportpfad D:Exports -ProductionCheckpoint

Herunterfahren einer VM und Export:

Export.ps1 -VM -Exportpfad D:Exports -Herunterfahren

Export einer VM und Umlenkung des Logs an einen anderen Speicherort:

Export.ps1 -VM -Exportpfad D:Exports -Logpfad “E:LogfilesHyper-V Export”

!!! Weitere Informationen in der ReadMe-Datei und im Skript selbst !!!

Probleme / Fehler

Falls Probleme oder Fehler auftreten, bitte einen kurzen Kommentar hier hinterlassen. Ich habe einige Exports gemacht, kann aber natürlich nicht jeden Fall testen bzw. berücksichtigen.

Download: 

Exportscript_Server2016_v0.3 (veraltet, verbleibt aber online)

Exportscript_Server2016_v0.4 (veraltet, verbleibt aber online)

Exportscript_Server2016_v0.4.1

Jan Kappen
 

Jan Kappen ist ausgebildeter Fachinformatiker in der Richtung Systemintegration. Er hat seine Ausbildung im Sommer 2008 abgeschlossen und arbeitet seitdem bei der Rachfahl IT-Solutions GmbH & Co. KG. Jan Kappen ist unter anderen MCITP Server Administrator, Enterprise Administrator und Enterprise Messaging Administrator 2010 sowie MCTS für System Center Virtual Machine Manager 2008, Windows Server 2008 Active Directory, Windows Server Virtualization und Windows Server 2008 Network Infrastructure. Im April 2015 wurde Jan Kappen im Bereich "File System Storage" für seine Expertise und seine Community-Arbeit mit dem MVP Award von Microsoft ausgezeichnet.

  • Michael Breu sagt:

    Hallo,

    Super Script. Leider funktioniert es bei mir (noch) nicht. Ich bekomme beim Aufruf

    powershell .\Export.ps1 -VM WinServer -Exportpfad X:\hyperVBackup

    die Meldung

    Export-VM : Fehler beim Exportieren des virtuellen Computers “WinServer”.
    In Z:\hyper-v\backup\Exportscript_Server2016_v0.4\Export.ps1:157 Zeichen:56
    + … curse -Force $Exportpfad\$VM; Export-VM -Name $VM -Path $Exportpfad }
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Export-VM], VirtualizationException
    + FullyQualifiedErrorId : OperationFailed,Microsoft.HyperV.PowerShell.Commands.ExportVM

    Leider ist die Meldung nicht sehr hilfreich. Bei -ProductionCheckpoint eine ähnliche Meldung. Ebenfalls, wenn die VM gestoppt ist.

    Googeln nach der Fehlermeldung hat nichts gebracht. Liegt es ggf. an der Deutschen Lokalisierung?

    Viele Grüße aus Innsbruck
    Michael

  • Jan Kappen sagt:

    Hi,
    Z: sieht nach einem Netzlaufwerk aus, ist dem so? Falls ja, kannst du bitte mal versuchen das Script lokal auf C: oder einer anderen lokalen Partition zu speichern? Funktioniert der Aufruf von einem Export-VM in einer PowerShell direkt? Ist die PowerShell als Administrator gestartet?
    Gruß, Jan

  • Christian sagt:

    Hallo,

    vorab erstmal vielen Dank für das geniale Skript. Leider habe ich ein kleines Problem beim Mailversand. Ich bekomme es nicht hin, dass das Log versand wird.

    Fehlermeldung:
    PS>TerminatingError(Send-MailMessage): “Der Prozess kann nicht auf die Datei “C:\windows\Logs\HyperVExport\2017-05-23.log” zugreifen, da sie von einem anderen Prozess verwendet wird.”
    Send-MailMessage : Der Prozess kann nicht auf die Datei “C:\windows\Logs\HyperVExport\2017-05-23.log” zugreifen, da sie
    von einem anderen Prozess verwendet wird.

    Sobald ich das Log auskommentiere, läuft die Mail auf. Das Skript wird als Administrator ausgeführt und das Log ist mit keiner anderen Applikation geöffnet.

    Besten Dank
    Christian

  • Bernhard sagt:

    Hallo,

    danke wieder einmal für das super Script; funktioniert perfekt.
    Habe die Function mail so geändert, dass eine Mail Authentifizierung mit verschlüsseltem Passwort möglich ist.

    function Mail
    {
    Write-Host -ForegroundColor Green (Get-Date) “Mail wird an die angegebene Adresse gesendet!”

    $SMTPServer = “smpt.office365.com”
    $SMTPPort = “587”
    $SMTPSsl = $true
    $EncryptedCredential = “C:\!scripts\Password.txt”
    $EmailUsername = “user@domain.at”
    $EncryptedPW = Get-Content $EncryptedCredential | ConvertTo-SecureString
    $Credential = New-Object System.Management.Automation.PsCredential($EmailUsername, $EncryptedPW)
    $EmailFrom = “mailFROM”
    $EmailTo = “mailTO”
    $EmailSubject = “‘VM Export der VM’ $VM”
    $EmailBody = “Anbei das Log der Export-Sicherung von VM $VM”
    $EmailAttachments = $Logdatei
    $SMTPServer = “smtp.office365.com”
    $SMTPPort = 587
    $SMTPSsl = $true
    Send-MailMessage -From $EmailFrom -to $EmailTo -Subject $EmailSubject -Body $EmailBody -SmtpServer $SMTPServer -Port $SMTPPort -Credential $Credential -UseSsl -Attachments $EmailAttachments
    }

    LG

    Bernhard

  • Micha sagt:

    Hallo,

    habt Ihr schon mal nur eine Partition exportiert.
    Ich möchte von unsern WSUS nur c: exportieren und d: mit Daten nicht.

    MFG Micha

  • Jan Kappen sagt:

    Hallo Micha,
    wenn nur C: exportiert werden soll, müsste D: auf eine eigene VHDX-Datei und diese müsste dann beim Export nicht mit exportiert werden. Diese Option ist meines Wissens nach aber nicht vorhanden, da immer die komplette VM exportiert wird. Alternative Möglichkeiten: Ein Backup-Produkt nutzen, was diese Funktion unterstützt oder die VM vor dem Export per PowerShell herunterfahren, die Disk abhängen, exportieren und nach dem Export wieder anhängen und starten.
    Gruß, Jan

  • Florian Böhm sagt:

    Hallo Herr Kappen,
    vielen Dank für das Skript. Funktioniert super. Ich wollte den Export jetzt auf eine NAS mit angebundenen Netzlaufwerk umstellen. Leider bekomme Ich eine Fehlermeldung:
    Fehler beim Exportieren des virtuellen Computers “VM-ad2” (6DE54BCF-FA0B-4257-9BED-54AA9DC07F96). Fehler: “Der
    Benutzername oder das Kennwort ist falsch.” (0x8007052E).
    in der PowerShell habe ich aber Zugriff auf das Verzeichnis.

    Vielleicht haben Sie einen Tipp für mich.

    Gruß und Danke Florian Böhm

  • Axel sagt:

    Hallo

    sehe ich es richtig dass diese neue Version des Scripts nur für Server2016 ist und nicht mit 2012R2 läuft ?

  • Jan Kappen sagt:

    Hallo Axel,
    das ist korrekt. Das Skript nutzt Funktionen, die unter 2012 R2 nicht zur Verfügung stehen. Das Skript für Server 2012 ist hier zu finden: https://www.hyper-v-server.de/management/hyper-v-sicherung-mittels-powershell-skript-fr-windows-server-2012/
    Gruß, Jan

  • Stefan sagt:

    Hallo

    Kann ich mit dem Script auch einen Server 2016 Domain Controller sichern und ggf. wiederherstellen?
    Danke für die Antwort
    Gruss Stefan

  • Carsten Rachfahl sagt:

    Hu Stefan,

    wenn es eine VM ist spricht aus Hyper-V Sicht nichts dagegen. Von der Anwendung (Domain) sieht das eventuell anders aus: es gelten hier auch die Regel wie bei der Normalen Domain Sicherung!

    Gruß Carten

  • Hannes sagt:

    Hallo

    Danke für das Script – komme aus der ESXi Welt mit ghettovcb da fühle ich mich gleich wohl mit dem Scrip :)
    Kleines Problem ist das das Logfile nicht versendet werden kann per Email da die Datei gesperrt ist während der Ausführung des Scripts.
    Ein Stop-Transcript vor dem versenden der Email löst das Problem für mich.

    fg

  • Tom sagt:

    Sehr schoene Fortfuehrung des Projekts. Optimal waere natuerlich das man als Parameter verschiedene VM´s zum sichern angeben koennte, so erspart man sich die Task Planerei mit den Zeiten.

  • Hallo,
    haben das Script in unserer Firma getestet, läuft soweit wunderbar. Kann man die VM auch direkt auf ein im Netzwerk liegendes NAS replizieren? Lokal läuft das Script sauber durch, gebe ich jedoch den Netzwerkpfad des NAS an, bringt das Script Fehler. Habe es auch schon versucht, den freigegeben Ordner auf dem NAS als Netzlaufwerk einzubinden und diesen Pfad dann zu hinterlegen (z.B. Z:/); leider derselber Fehler, der zum Großteil auf Zugriffsprobleme hinweist, obwohl die jeweiligen Berechtigungen eigentlich erteilt sind. Es werden auch die Standard-Ordner auf dem NAS angelegt, nur die replizierte VM fehlt.

    Wäre super, wenn es dafür evtl. eine Lösung gäbe :-)
    Gruß
    Chris

  • Alexander sagt:

    Hallo, wir haben den gleichen Fehler. Gibt es hierfür eine Lösung?

  • Jan Kappen sagt:

    Hallo,
    das ist ein Kerberos-Fehler. Gerät1 sagt Gerät2, dass es Daten auf Gerät3 ablegen soll. Das ist per default nicht erlaubt, hierzu muss eine Kerberos Delegierung eingestellt werden, damit Gerät2 und Gerät3 sich vertrauen.
    Gruß, Jan

  • WWestermann sagt:

    Hallo Herr Kappen,

    wie von einigen schon erwähnt, ist das Script eine Wohltat für VMWare-Adminis :)

    Leider stellt sich bei mir nicht der gewünschte Erfolg ein, es kommt zu folgender Fehlermeldung:

    —CUT—
    AUSFÜHRLICH: Export-VM exportiert den virtuellen Computer “Windows 10 – RDP” an den angegebenen Speicherort.
    Export-VM : Fehler beim Exportieren des virtuellen Computers “Windows 10 – RDP”.
    Fehler beim Exportieren des virtuellen Computers “Windows 10 – RDP” (5491312E-3557-4067-BD10-98E3B236A8E3). Fehler:
    “Es sind momentan keine Anmeldeserver zum Verarbeiten der Anmeldeanforderung verfügbar.” (0x8007051F).
    In C:BatchExport.ps1:142 Zeichen:43
    + … handen -eq $False) { Export-VM -Name $VM -Path $Exportpfad -verbose }
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Export-VM], VirtualizationException
    + FullyQualifiedErrorId : OperationFailed,Microsoft.HyperV.PowerShell.Commands.ExportVM

    19.06.2018 18:25:53 Export der VM Windows 10 – RDP abgeschlossen
    —CUT—

    Und jetzt hoffe ich ja, dass Sie eine Lösung für das Problem haben, oder eventuell sitzt der Fehler auch 60cm vor dem Computer…

  • Jan Kappen sagt:

    Hallo,
    die Ursache steht als Fehlermeldung im Skript: “Es sind momentan keine Anmeldeserver zum Verarbeiten der Anmeldeanforderung verfügbar.”
    Hier scheint etwas bei der Authentifizierung nicht zu passen…
    Gruß, Jan

  • >