Hyper-V Backup mit E-Mail und Report (Teil II)

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.

Aufgabenplanung auf Windows Server 2012 R2

Das finale Skript

Zusammengefasst gibt es zwei einzelne Elemente, welche für einen schnellen Start mit dem Skript notwendig sind.

  1. Skript als PS1 Download [LINK]
  2. Import Aufgabenplaner XML [LINK]

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

VMKommaseparierte Liste mit Namen der virtuellen Computer
WaitBeforeCloseKann 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.
DoitSofern 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 -> PATHPfadangabe 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 -> PATHDer 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.
VERSIONSSowohl Backup als auch im Duplicate kann die Anzahl der Versionen separat angegeben werden.
UsingSmbMountSowohl 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 PasswordAngabe von Benutzernamen und Kennwort für das entfernte Verzeichnis. Details siehe “UsingSmbMount”
7ZipOptionsFür 7zip können die Komprimierungsoptionen als ArgumentsFirst mit FileEnding und ArgumentsLast angegeben werden. Das Kennwort muss in die Angabe “<YOURPASSWORDHERE>” eingesetzt werden.
MAILHier müssen alle notwendigen Parameter für den Mailversand hinterlegt werden.
Tabelle 1: Übersicht der Parameter

Eine Anpassung des Skripts ist in der Regel nicht notwendig, kann jedoch gerne in Eigenregie durchgeführt werden.

Mehr zu diesem Beitrag

Quellen / Einzelnachweise

  1. PSHyperv Library James O’Neill (http://www.codeplex.com/psHyperV)
  2. Buffer Console Output to HTML (thanks to Adrian Milliner https://ps1.soapyfrog.com/2007/01/06/console-screen-grabs-in-html/)
  3. 7zip Konsolenparameter  (exec 7zip.exe /?)
  1. Hyper-V Befehle für Windows 10 und Server 2016
  2. PSHyperv Library
  3. Buffer PS1 Skript
  4. 7zip Download

Änderungshistorie

Erstellt: 2020-11-10Zuletzt geändert: 2020-11-10
Änderungshistorie: –
2020-11-10: Basis – Layout + Text
2022-10-23: Update Metabeschreibung

Schreiben Sie einen Kommentar

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

sieben − eins =