Logo faq-o-matic.net
Logo faq-o-matic.net

Windows Server Backup: VM-Namen herausfinden

von veröffentlicht am14. Dezember 2016, 06:44 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: PowerShell, Virtualisierung, Wiederherstellung   Translate with Microsoft Translator Translate EN   Die angezeigte Seite drucken

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.

image

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.

image

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:

Download: Get-VMNameFromBackupCatalog.ps1  Get-VMNameFromBackupCatalog.ps1 (569 bytes, 41 Downloads, letzte änderung am 7. Dezember 2016)

© 2005-2017 bei faq-o-matic.net. Alle Rechte an den Texten liegen bei deren Autorinnen und Autoren.

Jede Wiederveröffentlichung der Texte oder von Auszügen daraus - egal ob kommerziell oder nicht - bedarf der ausdrücklichen Genehmigung durch die jeweiligen Urheberinnen oder Urheber.

Das Impressum findet sich unter: http://www.faq-o-matic.net/impressum/

Danke, dass du faq-o-matic.net nutzt. Du hast ein einfaches Blog sehr glücklich gemacht!