Windows Server Backup, das eingebaute Datensicherungsprogramm von Windows Server, eignet sich auch, um virtuelle Maschinen in Hyper-V zu sichern. Versucht man allerdings, VMs aus dem Backup eines anderen Servers wiederherzustellen, so stößt man auf eine unerwartete Hürde: Windows Server Backup (WSB) zeigt den Namen der gesicherten VMs nicht an, sondern nur deren GUID.
Tolle Wurst. Was für eine VM mag das sein?
Tatsächlich sind die Namen zwar im Backupsatz enthalten, aber offenbar fehlt in WSB eine Funktion, um diese auch auszulesen. Sie finden sich in den XML-Dateien im Backup-Ordner. Man kann sie dort aufspüren, aber das ist ziemlich aufwändig, denn es kann eine ganze Reihe von XML-Dateien geben. Das ruft nach der PowerShell.
Das Skript Get-VMNameFromBackupCatalog.ps1 prüft alle XML-Dateien im Suchordner, ob sie von einem VSS Writer erzeugt wurden, was sich an deren Namen ablesen lässt. Ist dies der Fall, dann sind die Dateien Kandidaten für Informationen über die Hyper-V-Backups. Daher prüft das Skript für jede dieser Dateien, ob der betreffende VSS Writer der von Hyper-V war. Ist auch dies der Fall, dann gibt es für jedes gesicherte Element die VM-GUID und den VM-Namen aus, die sich in Attributen des Sicherungselements finden. Auf diese Weise erhält man eine Liste aller GUIDs und des zugehörigen Namens und kann damit identifizieren, welche VM man in WSB wiederherstellt.
Hier ist das Skript:
$BackupPath = (Get-ChildItem 'E:\WindowsImageBackup\HV16-01\Backup 2016-11-28 123316')
foreach ($File in $BackupPath.GetEnumerator()) {
if ($file.Name.Contains('Writer')) {
# we have a file with VSS writer info, now parse it
$xml = New-Object -Typename XML
$xml.load($File.FullName)
# get the writer's friendly name
$WriterName = ($xml.WRITER_METADATA.IDENTIFICATION.friendlyName)
if ($WriterName.Contains('Hyper-V')) {
# we have a Hyper-V writer file, now get the file group information
$FileGroup = ($xml.WRITER_METADATA.BACKUP_LOCATIONS.FILE_GROUP)
foreach ($File in $FileGroup) {
# for VMs, componentName contains the VM's GUID, caption contains its name
$File.componentName + ': ' + $File.caption
}
}
}
}
Um auf den Backup-Ordner zuzugreifen, benötigt man u.U. Administratorrechte, daher empfiehlt es sich, die PowerShell ISE als Administrator zu starten und dort das Skript zu öffnen. In der ersten Zeile gibt man den Pfad zu dem Backup-Ordner mit den XML-Dateien an.
Download des Skripts:
Get-VMNameFromBackupCatalog.ps1 (569 bytes, 746-mal heruntergeladen, letzte Änderung am 7. Dezember 2016)
http://faq-o-matic.net/?p=7616