PowerShell Techguy.at

Auslesen der DPM Tapes inklusive Ablaufdatum

PowerShell

Dieses Script hat mir schon sehr viel geholfen, deshalb möchte ich es euch zur Verfügung stellen.

Ich hatte immer wieder die Anforderungen bei Kunden, das Sie eine Aufstellung der Bänder benötigen die Sie aus der Library nehmen können und gleichzeitig wollten Sie auch wissen, wann diese Bänder ablaufen.

Natürlich kann man diese Information aus der Konsole erhalten, doch das ist doch etwas mühsam, gerade bei vielen Bändern.

Deshalb habe ich ein Skript geschrieben, welches alle Tapes aus der Library ausliest die “Offsite Ready” sind, deren Ablaufdatum herausfindet und mit der Bezeichnung und der Slot Nummer in ein CSV schreibt.

Somit hat der Kunde sofort eine Liste welche Bänder er aus der Library nehmen kann, und gleichzeitig eine Doku zu welchem Zeitpunkt dieser wieder frei sind, sprich dessen Daten abgelaufen sind.

Das Script

Zu Beginn importieren wir die Data Protection Manager CMDlet’s, hier ist die Voraussetzung das ein DPM ab der Version 2012 verwendet wird, ansonsten müssen die CMDlets anders importiert werden.

Wer noch keinen DPM 2012 oder höher hat, hier der Weg dorthin: https://www.techguy.at/2013/10/28/upgrade-auf-system-center-data-protection-manager-2012-r2/

#Import Modules
Import-Module dataprotectionmanager

Jetzt erfolgen die Variablen die nach euren Wünschen angepasst werden können.

#Variables
$DPMServer=”dpmsrv”
$File=”C:\_BaseIT\DPMTapeList.csv”

Nun ein paar Settings, wir holen uns die DPM Library und alle Tapes die “Offsite Ready” sind.

#Settings
$Library=Get-DPMLibrary -DPMServerName $DPMServer
$Tapes=Get-Tape -DPMLibrary $Library | where {$_.IsOffsiteReady -eq $True}

Danach überprüfen wir ob unser CSV File bereits existiert und löschen dieses falls vorhanden, danach füllen wir die erste Zeile mit der Überschrift.

#Delete File and create new one
if (Test-Path $File) {Remove-Item $File}
“Barcode;Name;Slot;Expire”| Out-File -FilePath $File –Append

Jetzt folgt die Magie, relativ simple aufgebaut.

Wir bearbeiten jedes Tape in der Library, holen uns dazu die RecoveryPoints und kontrollieren welcher die längste Retention Range hat, dies ist unser Wert ab wann das Tape wieder frei wird.

#Magic
foreach ($Tape in $Tapes) {

$RPs=Get-RecoveryPoint -Tape $Tape
foreach ($RP in $RPs) {
$ExpDate = Get-Date
if ($ExpDate -lt $RP.recoverysourcelocations[0].expirydate) {
$ExpDate = $RP.recoverysourcelocations[0].expirydate
}

}
$Tape.Barcode.Value+”;”+$Tape.DisplayString+”;”+$Tape.Location.Id+”;”+$ExpDate | Out-File -FilePath $File -Append
}

Das Ergebnis sollte wie folgt aussehen

image

Sollte ihr neue Anforderungen an das Script haben, schreibt mit in den Kommentaren.

 

Den Download zum aktuellen Script findet ihr in der TechNet Gallery: http://gallery.technet.microsoft.com/DPM-Tape-List-with-1f9fc697

Bitte nehmt euch die Zeit und bewertet meine Downloads in der TechNet Gallery, würde mich sehr freuen.

Hier findet ihr alle meine Download in der TechNet Gallery: http://gallery.technet.microsoft.com/site/search?f%5B0%5D.Type=Tag&f%5B0%5D.Value=TechguyAT&f%5B0%5D.Text=TechguyAT

Michael Seidl aka Techguy

5 thoughts on “Auslesen der DPM Tapes inklusive Ablaufdatum”

  1. Besten Dank für das Skript!
    Ein paar Ideen hätte ich noch:
    – Reinigungsband ausschließen (get-tape | where {$_.Type -ne ‘CleanerMedia’} )
    – Alternativ ALLE Bänder ausgeben als Übersicht ($Tapes=Get-ProtectionGroup -DPMServer dpmsrv | get-tape | where {$_.Type -ne ‘CleanerMedia’})
    – Ausgabe sortieren, z.B. nach Barcode oder ExpDate
    – Datumsformat anpassen, so dass Excel damit automatisch klarkommt

    Danke und viele Grüße,
    Markus

  2. Hallo Michael,

    Ich war ganz angetan dein Script gefunden zu haben!
    Leider läuft es nicht durch und ich habe keine Idee warum,
    fällt dir dazu was ein?

    Unable to index into an object of type Microsoft.Internal.EnterpriseStorage.Dls.UI.ObjectModel.SQL.SQLRecoverysource.
    At C:\Users\Simon_admin\Desktop\GetDPMTapeList.ps1:73 char:21
    + $ExpDate = $RPs[ <<<< 0].recoverysourcelocations[0].expirydate
    + CategoryInfo : InvalidOperation: (0:Int32) [], RuntimeException
    + FullyQualifiedErrorId : CannotIndex

Leave a Comment

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

*