Hyper-V Sicherung mittels Powershell Skript für Windows Server 2012 [Update 1 auf v0.2]
Im Juni 2010 hat mein Kollege Carsten Rachfahl ein PowerShell-Script geschrieben, welches Ihnen die Möglichkeit bietet, zeitgesteuert per Aufgabenplanung eine VM herunterzufahren, zu exportieren und wieder zu starten. Das Script ist hier einzusehen:
Hyper-V Sicherung mittels Powershell Script
Da es sich um Hyper-V unter Windows Server 2008 R2 handelt, funktioniert das Script unter Windows Server 2012 nicht mehr. Uns haben einige Anfragen erreicht, ob wir auch für Server 2012 ein solches Script erstellen können. Ich habe mich der Thematik einmal angenommen und habe solch ein Script erstellt.
Update 16.03.2013: Die Version 0.2 ist online, die Änderungen finden Sie weiter unten in diesem Beitrag.
Update 14.12.2016: Eine neue Version für Windows Server 2016 ist hier verfügbar: Hyper-V Sicherung mittels Powershell Skript für Windows Server 2016
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!
Die Funktionsweise
Wenn Sie das Script heruntergeladen und entpackt haben finden Sie zwei Dateien vor: Export.ps1 und ReadMe.txt. Die Textdatei beinhaltet eine Beschreibung der Funktionen, die verfügbaren und teilweise benötigten Parameter sowie eine Beschreibung der Parameter. Im weiteren Verlauf finden Sie Beispiele für den Aufruf des Scripts, zusätzlich wird ein Changelog geführt, in dem Änderungen mitgeführt werden.
Der Aufruf des Scripts mit dem Parameter –verbose zeigt den folgenden Inhalt:
Wie Sie erkennen können, protokolliert das Script mit, was genau passiert. Der Aufruf mit fehlerhaften oder nicht vorhandenen (zwingend benötigten) Parametern endet in einer Fehlermeldung:
Neben der Ausgabe innerhalb des PowerShell-Fenster erzeugt das Script Ihnen eine Logdatei, in der der Vorgang ebenfalls protokolliert wird. Dies ist hilfreich, wenn Sie das Script per Taskplaner ausführen lassen und somit keine aktive Sitzung haben. Standardmäßig wird das Logfile unter C:\temp abgelegt. Wenn der Ordner nicht vorhanden ist wird er erstellt, wenn Sie einen anderen Ordner angeben kann die Logdatei auch dort gespeichert werden.
Pro VM und pro Tag wird ein eigenes Logfile erstellt, wenn an einem Tag mehrere Vorgänge ausgeführt werden wird das Log jeweils “hinten” verlängert. Die Datei sieht wie folgt aus:
Wenn Sie Ihre VM nicht herunterfahren möchten, können Sie diese auch mit dem Parameter –Speichern in den Gespeicherten Zustand versetzen und dann Exportieren lassen:
Das Logfile ändert sich ebenfalls dementsprechend:
Ein Export in eine Freigabe direkt ist ebenfalls möglich, Bedingung hierfür ist allerdings ein Dateiserver mit Windows Server 2012 (SMB 3.0 ist hier das Stichwort) und einer Freigabe, auf die das Computerobjekt des Hyper-V Hosts einen Schreibzugriff hat. Wenn dies gegeben ist, funktioniert auch ein Export, siehe Screenshot:
Einschränkungen
Dieses Script funktioniert nur unter Windows Server 2012 in der deutschen Sprachvariante. Der Grund hierfür ist, dass die Namen der Integrationskomponenten eingedeutscht wurden und so eine Nutzung auf englischen Systemen ohne Anpassung nicht möglich ist. Ich werde versuchen, diese Einschränkung zu entfernen und eine Abfrage einbauen, die die Sprache der Umgebung ausliest und sich dementsprechend anpasst.
Eine weitere Einschränkung besteht aktuell noch darin, dass ein bereits vorhandener Export überschrieben bzw. gelöscht wird. Ich plane eine Anpassung, in der ein Parameter wahlweise eine Kopie des bereits vorhandenen Exports anfertigt.
Bei der Anzeige der Logdatei bzw. der Ausgabe der Konsole zeigt die Ausgabe vielleicht nicht den korrekten Status. Dies liegt daran, dass bei Erreichen von gewissen Zuständen eine Ausgabe gemacht wird. Wenn Sie während eines Exports diesen manuell per Hyper-V-Manager abbrechen, wird Ihnen die Konsole mit aktivem Export-Script dies mit einer roten Fehlermeldung quittieren, die geschriebene Logdatei wird dies allerdings nicht aufnehmen und der Export sieht (laut Logdatei) korrekt aus. Eine Aufnahme der System-Fehlermeldungen ist geplant.
All diese Dinge hier werden (vielleicht) angegangen, wenn Zeit dafür vorhanden ist. Da es sich hierbei um eine unentgeltliche Entwicklung handelt, passiert dies immer dann, wenn für so etwas Zeit ist. Wir können Ihnen weder versprechen wann etwas hinzugefügt wird noch ob dies überhaupt passiert. Gerne können wir Ihnen ein auf Ihre Umgebung angepasstes Script erstellen, dies wäre dann eine kostenpflichtige Dienstleistung.
Vorbereitungen auf dem System
Um das Script starten zu können, müssen Sie die Script-Datei nach dem entpacken Zulassen. Dies passiert über die Eigenschaften im Reiter Allgemein:
Weiterhin müssen Sie die Ausführung von nicht signierten Skripten erlauben, dies konfigurieren Sie über den Befehl
Set-ExecutionPolicy Unrestricted
Persönliches Statement
Ich habe bisher noch kein PowerShell-Script mit mehr als fünf Zeilen erstellt, daher ist dies quasi meine Feuertaufe. Die Programmierung ging nach ein paar Stunden Einarbeitung und Suche nach der korrekten Syntax recht einfach von der Hand, PowerShell als Sprache ist sehr einfach aufgebaut. Ich kann mich noch an die Programmierung mit C oder C++ erinnern, mit denen wir in der Schule gequält wurden. PowerShell hat nur noch wenig damit zu tun, die Erstellung von funktionstüchtigen Skripten geht recht schnell mit wenig Quelltext. Gehen Sie einmal offen auf das Thema PowerShell zu, Sie werden es nicht bereuen :)
Download
Version 0.2 – ExportScript fuer Hyper-V unter Windows Server 2012
Version 0.1 – ExportScript fuer Hyper-V unter Windows Server 2012
Feedback
Ich würde mich über ein Feedback zu diesem Script freuen. Da es mich stark wundern würde wenn ich direkt ein fehlerfreies Script geschrieben habe, bitte ich um Rückmeldung zu aufgetretenen Fehlern und Problemen. Ich werde versuchen diese zeitnah zu beseitigen und die jeweilige Version anzupassen. Rückmeldung können Sie mir als Kommentar oder gern auch per Mail zukommen lassen. Bitte haben Sie Verständnis dafür, wenn ich nicht zeitnah reagieren kann.
Update 16.03.2013 – Version 0.2
Ich habe das Script in einer neuen Version zum Download freigegeben, die größte Änderung: Sie können sich das Logfile der Sicherung per Mail schicken lassen. Bedingung hierfür ist ein Mailer, der Emails per SMTP entgegennimmt und zustellen kann.
Wichtig: Wenn Sie die Funktion nicht nutzen möchten
{ brauchen Sie entweder nichts machen und auf Version 0.1 bleiben }
oder
{ auf Version 0.2 updaten und zum einen nichts anpassen und zum anderen den Parameter nicht anpassen! }
Weitere Einzelheiten zur Syntax finden Sie in der Hilfe-Datei, hier ein paar Screenshots der Konfiguration und der Nutzung:
Sie müssen das Script auf Ihre Werte anpassen. Standardmäßig sieht es wie folgt aus
Dies muss wie folgt angepasst werden
Tragen Sie Ihre persönlichen Daten ein und achten Sie darauf, dass Ihr Mailer die Emails annimmt. Die Ausführung des Scripts sieht nun wie folgt aus, je nach Parameter erfolgt entweder ein Versand oder nicht.
Die zugestellte Email sieht wie folgt aus
Wie immer gilt: Bei Fehlern oder Problemen bitte kurz einen Kommentar dalassen. Die alte Version bleibt ebenfalls verfügbar, falls benötigt. Viel Spaß mit dem Script :)