PowerShell Techguy.at

Hyper-V Recovery mittels PowerShell und SCDPM

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

6 thoughts on “Hyper-V Recovery mittels PowerShell und SCDPM”

  1. 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

  2. Reinhard Weiss

    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

  3. Reinhard Weiss

    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

  4. Reinhard Weiss

    Hallo Michael,

    jetzt erst gesehen das du geantwortet hast. Herzlichen Dank f. deine Antwort und vielen Dank f. das Script!

    Lg Reinhard

Leave a Comment

Your email address will not be published. Required fields are marked *

*