Diesmal zeige ich euch, wie ihr mittels PowerShell eine Hyper-V VM aus dem System Center Data Protection Manager auf eine Disk wiederherstellen könnt.
Ich musste mal bei einem Kunden alle Datasources der letzten 12 Monate wiederherstellen. Bei 12 Monaten und ca. 200 Datasources kann das per GUI schon ne Weile dauern. Deshalb habe ich mich dazu entschieden das ganze per PowerShell zu machen.
Gestern bekam ich auf Twitter, vom User @_clxe, folgende Anfrage: Hast du einen Tipp wie ich Hyper-V VMs per PowerShell auf ein Filesystem restoren kann?
Dann habe ich mein altes PowerShell Script ausgepackt und es mit Hyper-V VMs probiert und das stelle ich euch heute vor.
Das Script
$DPMServer=$env:COMPUTERNAME $RecoveryLocationServer=$env:COMPUTERNAME $Location="C:\_Install\Test" $ProtectiongroupName="Images" $PS=Get-ProductionServer -DPMServerName $DPMServer | where {$_.servername -eq $DPMServer} Get-Datasource -ProductionServer $PS -Inquire -ErrorAction SilentlyContinue | Out-Null $pg = Get-ProtectionGroup -DPMServerName $DPMServer | where {$_.name -match $ProtectiongroupName} $ds = Get-Datasource $pg $rop = New-RecoveryOption -TargetServer $RecoveryLocationServer -RecoveryLocation CopyToFolder -RecoveryType Restore -TargetLocation $Location -HyperVDatasource foreach ($entry in $DS) { $rpl = Get-RecoveryPoint $Entry | sort -Property BackupTime -Descending | select -First 1 Recover-RecoverableItem -RecoverableItem $rpl -RecoveryOption $rop }
Die Details
In den ersten 4 Zeilen definieren wir ein paar Werte
$DPMServer: das ist unser DPM Server, der die gesicherte Hyper-V VM beinhaltet
$RecoveryLocationServer: das ist der Server, auf dem wir die Hyper-V VM wiederherstellen möchten, dies kann auch der DPM Server selbst sein. Voraussetzung ist, das auf dem Server ein DPM Agent installiert ist.
$Location: Damit geben wir das Ziel für die Wiederherstellung an
$ProtectiongroupName: Der Name unserer Schutzgruppe, welche die Hyper-V VMs beinhaltet
Die folgenden 2 Zeilen, machen ein Inventory des $RecoveryLocationServer damit wir dann auch das Verzeichnis finden, in dem wir wiederherstellen möchten.
Danach holen wir uns die Schutzgruppe in die Variable $PG
Aus dieser Schutzgruppe holen wir uns alle Datasources und schreiben dies in die Variable $DS
Jetzt müssen wir noch die Wiederherstellungsoptionen festlegen, das machen wir mit der Variable $ROP.
Die Wiederherstellungsoptionen sind für jeden Typ von Datasources und für jedes Ziel etwas unterschiedlich. Ich werde mal versuchen alle Wiederherstellungsoptionen und Typen hier in einem Beitrag vorzustellen.
Danach versuchen wir die aktuellste Sicherung, aus jeder Datasource die wir in der Schutzgruppe gefunden haben, auf dem $RecoveryLocationServer in die $Location, wiederherzustellen.
Was sagt ihr, wollt ihr das überhaupt wissen, oder interessiert euch was anderes?
Michael Seidl aka Techguy
Hallo Michael,
vielen Dank für den Blogpost! Mein Fehler muss irgendwo bei den gewählten Optionen von “New-RecoveryOption” gelegen haben. Der Restore mittels obigem Script hat sofort funktioniert und erledigt nebenbei gleich genau meine Aufgabenstellung.
Danke! 🙂
Grüße Carsten aka @_clxe
Hallo Carsten,
super freut mich
lg Michael
Hallo Michael,
dieses Script ist genau das was ich brauche.
Leider stürzt die DMP Management Shell ab nachdem drei Maschinen ab.
Diese werden erfolgreich wiederhergestellt. Insgesamt sind ca. 10 Server in dieser Protection Group.
Fault bucket , type 0
Event Name: PowerShell
Response: Not available
Cab Id: 0
Problem signature:
P1: powershell.exe
P2: 6.3.9600.18968
P3: System.NullReferenceException
P4: System.NullReferenceException
P5: unknown
P6: overyCmdLets.RecoverRecoverableItem.ValidateInputs
P7: unknown
P8:
P9:
P10:
Attached files:
These files may be available here:
C:\ProgramData\Microsoft\Windows\WER\ReportQueue\Critical_powershell.exe_e1d09746d0e27bb6175b8be57c1902189109316_00000000_09f36eca
Analysis symbol:
Rechecking for solution: 0
Report Id: f7438631-7b93-11e8-80dc-0025906a9407
Report Status: 4100
Hashed bucket:
und gleich danach:
Fault bucket , type 0
Event Name: PowerShell
Response: Not available
Cab Id: 0
Problem signature:
P1: powershell.exe
P2: 6.3.9600.18968
P3: System.NullReferenceException
P4: System.NullReferenceException
P5: unknown
P6: overyCmdLets.RecoverRecoverableItem.ValidateInputs
P7: unknown
P8:
P9:
P10:
Attached files:
These files may be available here:
Analysis symbol:
Rechecking for solution: 0
Report Id: f7438631-7b93-11e8-80dc-0025906a9407
Report Status: 262144
Hashed bucket:
Das Ganze auf einem Windows Server 2012R2, DPM 2016 RU5
Via google leider nichts gefunden…
Danke!
Lg Reinhard
Hi, Danke für die Info, da ich aber mittlerweile weit weg von DPM bin, kann ich dir nicht helfen
Hallo!
Problem gelöst. Innerhalb der herzustellenden protection group dürfen sich ausschließlich VM´s befinden.
In unserem Fall waren auch zwei Server in der Gruppe enthalten die via Agent bare metal recovery gesichert wurden.
Lg Reinhard
Hallo Michael,
jetzt erst gesehen das du geantwortet hast. Herzlichen Dank f. deine Antwort und vielen Dank f. das Script!
Lg Reinhard