Dies ist die Fortsetzung des ersten Teils.
Es gibt viele Hyper-V Backup Tools, Programme und Skripte auf dem Markt.
Auch wenn diese oftmals nicht viel kosten, helfen sie nicht, wenn das darunter liegende Betriebssystem nicht unterstützt wird. Werden virtuelle Maschinen auf Windows 7 oder Windows 10 betrieben (Client Hyper-V), muss daher eine andere, aber dennoch schöne und funktionale Lösung her.
Im nachfolgenden Artikel wird ein universelles PowerShell Skript mit E-Mail-Reports und Kompression der exportierten virtuellen Systeme, inklusive einer Duplizierung auf ein entfernt liegendes Netzwerkgerät beschrieben. Der Download des fertigen Skripts kann hier erfolgen.
Einleitung Teil II
Nachdem es im ersten Teil um das Anforderungsmanagement für das Skript ging, kann jetzt im zweiten Teil direkt in die Lösung eingestiegen werden.
Kleine Zusammenfassung der Anforderungen
- PowerShell als Basis
- Export auf
- Lokalen Computer
- Entfernten Datenspeicher
- Unterstützte Betriebssysteme
- Windows 7
- Windows 10
- Windows Server 2008 ff.
- Parallelisierung des Exports
- Passwort für Export (Verschlüsselung)
- Kompression für Export
- Duplizierung und Versionierung des Exports
Umsetzung der Anforderungen als Skript
Nachfolgend werden die in Teil I beschriebenen Lösungsoptionen als PowerShell Skript dargestellt.
INI-Datei für Skript Parameter
Die Funktion import-ini ermöglicht es die Parameter in der INI Datei zu lesen und diese als Variablen und Arrays in PowerShell zu verwenden.
Die Parameter in der INI Datei müssen wie folgt aussehen:
VARIABLE=WERT oder
ARRAY=WERT,WERT
Einträge mit beginnender Raute „#“ als auch einer Eckigen Klammer werden dabei ignoriert.
Hyper-V-Backup
Die Lösung für konsistente und zuverlässige Backups in Hyper-V, sind vollständige Exporte der virtuell betriebenen Systeme. Die zuvor aus der INI Datei in einem Array gespeicherten Namen der virtuellen Systeme, werden in den Zeilen 209 bis 243 exportiert . Hierbei wird zunächst eine Bereinigung des Exportverzeichnisses durchgeführt und danach, die für die entsprechenden Clientbetriebssysteme notwendigen Befehle in passender Abfolge abgesetzt.
Wie z. B. in den Zeilen 236 bis 240 ersichtlich, kann durch die IF Abfrage die Art des Backups leicht auf neue Betriebssysteme als auch neue Befehlssätze erweitert werden.
Verschlüsselung
In den Zeilen 279 ff. wird der zuvor definierte 7zip Befehl ausgeführt. Dabei wird das gesamte Exportverzeichnis der virtuellen Maschine in eine eigene ZIP-Datei geschrieben. Die zuvor in der INI-Datei definierten Parameter werden dabei angehängt, sodass die Kompression als auch das hinterlegte Kennwort angewendet werden.
Duplizierung
Innerhalb der Kompressionsschleife, wurde ab Zeile 307 zusätzlich die Option der Duplizierung eingefügt. Dadurch wird sofort nach der Kompression, ein Duplikat für das Backup erzeugt.
Versionierung
Die Funktion FileVersioning benötigt als Angabe das Verzeichnis, die Anzahl an Versionen, als auch den vorgegebenen Namen der Dateien. Die älteste Version im Verzeichnis wird gelöscht und alle vorhergehenden Versionen werden anhand des Dateinamens auf die vorhergehende Version verschoben.
Diese Funktion wird innerhalb des Backups aufgerufen, damit zeitlich nur ein minimaler Ausfall der Anzahl von Redundanzen entsteht.
Parallelisierung der Aufgaben
Durch die Aufgabenplanung als auch den Skriptaufbau mit INI-Datei, kann das Backup Skript mehrfach mit unterschiedlichen INI-Dateien aufgerufen werden. Das Resultat kann zum täglich versetzten Backup einzelner virtuellen Computer, als auch zur Parallelisierung verwendet werden.
Besonderheiten der Parallelisierung
Die Aufgaben und Schritte des PowerShell Skripts können jederzeit durch die INI-Datei angepasst werden.
Die Abfolge der Schiritte ist jedoch zeitlich von der Festplattengröße der virtuellen Maschine abhängig.
Damit eine Netzwerk- oder Festplatten IOPs-Überlastung vermieden wird, sollten während des ertsmaligen Backups die o. g. Werte überwacht und im Anschluss zeitlich in eine passende Abfolge gebracht werden.
Berichte via E-Mail
Ab Zeile 267 wird die Variable HTMLBody durch Hinzufügen weiterer Zeilen beschrieben. Dadurch wird der für den Report notwendige HTML Code während der Ausführung geschrieben und im Nachgang via E-Mail gesendet werden.
In den Zeilen 476 bis 490 wird dann die Mailfunktion incl. des zuvor erstellten HTMLBody’s gesendet. Dabei werden die Logdateien entsprechend zur weiteren Analyse mit angehängt.
Aufgabenplanung
Unter Zuhilfenahme des Aufgabenplaners, wird das Backup mit Parametern gestartet. Dadurch wird eine zeitliche Planung als auch Überwachung der Aktivitäten möglich.
Hürden der PowerShell überwinden (der Skript Aufruf)
Wie in Teil I beschrieben, muss für eine passende Funktion des Skripts dieses Signiert werden. Damit dies nicht notwendig ist, sollte das Skript mit „-ExectionPolicy unrestricted“ gestartet werden.
Als Startbefehl wird hier der Einfachheit halber „%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe“ verwendet.
Als Argument wird „C:\scripts\HV-Backup-GT.ps1“ dem Taskplaner übergeben.
Zusätzlich wird das Arbeitsverzeichnis auf „C:\scripts“ gesetzt.
Hürden des Betriebssystems überwinden
Damit die Benutzerkontensteuerung und die damit höheren Rechte des Benutzers innerhalb des Betriebssystems aktiv nutzbar sind, wird die Aufgabe mit höchsten Rechten ausgeführt.
Das finale Skript
Zusammengefasst gibt es zwei einzelne Elemente, welche für einen schnellen Start mit dem Skript notwendig sind.
Alternativ
Gesamtes Paket als ZIP Datei [LINK]
Das Skript sollte unter C:\scripts abgelegt werden. Die Details der notwendigen Parametrisierung werden nachfolgend beschrieben.
Notwendige Anpassungen
INI-Datei: Alle in eckigen Klammern geschriebenen Variablen müssen gesetzt werden. Entsprechende Verzeichnisse müssen angelegt und für den Skript Benutzer mit Vollzugriff berechtigt werden.
Aufgabenplaner: Die im Downloadpaket enthaltene XML Datei kann als Basis für den Planer verwendet werden. Vorab der Aufgabenplanung ist es ratsam das Skript mit Administratorenrechten in einer Konsole auszuführen. Hierzu empfiehlt es sich den Parameter WaitBeforeClose temporär auf FALSE zu setzen.
Beschreibung der INI Variablen
VM | Kommaseparierte Liste mit Namen der virtuellen Computer |
WaitBeforeClose | Kann TRUE oder FALSE gesetzt werden, damit der Kommandozeilenaufruf nicht automatisch geschlossen wird. Hintergrundinformation: Bei Fehlern im Ablauf wird das Skript sich beenden und damit werden auch die zuvor in die Konsole ausgegebenen Informationen/Fehler verschwinden. |
Doit | Sofern eine Option wie E-Mail, Logging oder Duplizierung durchgeführt werden soll, kann dieser Wert auf TRUE gesetzt werden. Diese Flexibilität ermöglicht es in besonderen Szenarios Optionen zu deaktivieren. |
EXPORT -> PATH | Pfadangabe zum Export. Sollten im Pfad Leerzeichen enthalten sein, so muss der Pfad in Anführungszeichen gesetzt werden. Es empfiehlt sich eine dedizierte Partition oder ein Laufwerk zu verwenden damit laufende virtuelle Systeme nicht von hohen IOPs auf dem Datenträger ausgebremst werden. |
BACKUP -> PATH | Der lokaler Pfad zur Ablage der Backups. Sollten im Pfad Leerzeichen enthalten sein, so muss der Pfad in Anführungszeichen gesetzt werden. Es empfiehlt sich eine dedizierte Partition oder ein Laufwerk zu verwenden damit laufende virtuelle Systeme nicht von hohen IOPs auf dem Datenträger ausgebremst werden. |
VERSIONS | Sowohl Backup als auch im Duplicate kann die Anzahl der Versionen separat angegeben werden. |
UsingSmbMount | Sowohl Backup als auch im Duplicate kann für einen Netzwerkpfad über die zusätzliche Angabe von Benutzername & Kennwort angegeben werden. Damit während der Ausführung ein Zugriff auf diesen Pfad möglich ist, ist ein Mount Befehl notwendig. Die Variable muss hierzu auf TRUE gesetzt werden. |
Username Password | Angabe von Benutzernamen und Kennwort für das entfernte Verzeichnis. Details siehe „UsingSmbMount“ |
7ZipOptions | Für 7zip können die Komprimierungsoptionen als ArgumentsFirst mit FileEnding und ArgumentsLast angegeben werden. Das Kennwort muss in die Angabe „<YOURPASSWORDHERE>“ eingesetzt werden. |
Hier müssen alle notwendigen Parameter für den Mailversand hinterlegt werden. |
Eine Anpassung des Skripts ist in der Regel nicht notwendig, kann jedoch gerne in Eigenregie durchgeführt werden.
Mehr zu diesem Beitrag
Quellen / Einzelnachweise
- PSHyperv Library James O’Neill (http://www.codeplex.com/psHyperV)
- Buffer Console Output to HTML (thanks to Adrian Milliner https://ps1.soapyfrog.com/2007/01/06/console-screen-grabs-in-html/)
- 7zip Konsolenparameter (exec 7zip.exe /?)
Weiterführende Links
- Hyper-V Befehle für Windows 10 und Server 2016
- PSHyperv Library
- Buffer PS1 Skript
- 7zip Download
Änderungshistorie
Erstellt: 2020-11-10 | Zuletzt geändert: 2020-11-10 |
Änderungshistorie: – 2020-11-10: Basis – Layout + Text 2022-10-23: Update Metabeschreibung |