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
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
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
Hallo Markus,
danke fürs Feedback, teilweise wurde die Änderungen bereits in der Version 1.2 realisiert
https://www.techguy.at/getdpmtapelist-in-der-version-1-2-verfuegbar/
Den Rest nehme ich mit für die nächste Version.
Wenn du informiert werden möchtest sobald eine neue Version erscheint, kannst du den Newsletter abonnieren: https://www.techguy.at/newsletter/
Michael Seidl aka Techguy
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
Hallo Simon,
danke für deine Rückmeldung.
Bitte teste mal die aktuellste Version die du immer hier findest: https://www.techguy.at/tag/getdpmtapelist/
Bitte auch den Download bewerten wenn er dir gefällt
Ich bin der Meinung ich hätte die aktuellste Version ausprobiert, werde es morgen aber nochmals probieren. Danke für die rasche Antwort!
Gruss Simon