Description

Using Powershell and the DPM Cmdlets we'll query all the libraries on a DPM server to show the contents of each tape.  This script is only using SOME of the available data.  You can pull it all out if you want by running the GET-MEMBER against each part (Like $TAPELIBRARIES) in the ISE or PowerGUI and building a massive CSV file.

This might not be the BEST way to do it (It's pretty slow) but it's probably and easier way to see how to access data inside of data inside of data inside of.... well you get the idea

Script

PowerShell
Edit|Remove
# Get all the libraries from DPM Server named 
# 'NameofADPMServer' 
# 
# Yeah, it's a pretty silly name 
# 
$TAPELIBRARIES=GET-DPMLibrary –DPMServerName ‘NameOfADPMServer’ 
 
# Create file called DPMTapes.csv in the folder 
# C:\Powershell 
# 
 
$FILENAME=’C:\Powershell\DPMTapes.csv’ 
 
NEW-ITEM –path $FILENAME –itemtype File –force 
 
# Create a header to start the file off.  This will be 
# delimited with a Comma to make it a CSV 
# 
 
$HEADER=’TapeLibrary,ComputerName,TapeLocation,TapeState,Barcode,CreationDate,RecoveryPointName,Size’ 
 
ADD-CONTENT –path $FILENAME –value $HEADER 
 
# Step through each library and pull out the data 
# 
Foreach ($TAPELibrary in $TAPELIBRARIES) {  
 
# I want the Nice friendly name for the Library and 
# the Server it's on 
# 
     $TLUFN=$TAPELibrary.UserFriendlyName  
     $TLMN=$TAPELibrary.Machinename 
 
# now Gimme the list of tapes on that library 
# or ... or something ;) 
 
     $TAPELIST=$TAPELibrary | GET-TAPE  
 
# Go through each tape and... 
 
         Foreach ( $TAPE in $TAPELIST ) { 
 
# Gimme the location,BarCode,CreationDate 
# and the DataSetState.  I'll also take a Ham on  
# Rye and a bowl of Chicken soup as well 
 
         $TapeLocation=$Tape.Location  
         $TapeState=$Tape.DataSetState  
         $TapeBarcode=$Tape.Barcode  
         $TapeDate=$Tape.CreationDate 
 
# Now Gimme them Recovery points on EACH tape 
 
# Funny thing is they call it a "Recovery Point" and 
# I think of it as "that Thing I backed up, like my  
# email system" 
 
              $RP=$TAPE | GET-RECOVERYPOINT  
 
              Foreach ($point in $RP) { 
 
# Now give me the specifics on each Recovery Point 
# like IT'S name, and maybe how much is on there 
 
               $RPUFN=$Point.UserFriendlyName  
               $RPSize=$Point.Size 
 
# Huff....huff...huff.... PHEW! Tired yet? 
 
# Now let's pull all of this stuff together into a nice  
# single variable.  REMEMBER to put it into the SAME 
# order as our original header or it'll look like a mess 
# 
# Neatness counts you know :) 
                $OUTPUT=$TLUFN+’,’+$TLMN+’,’+$Tapelocation+’,’+$TapeState+’,’+$TapeBarcode+’,’+$Tapedate+’,’+$RPUFN+’,’+$RPSize 
 
# Add that onto our never ending CSV file 
 
                ADD-CONTENT –path $FILENAME –value $OUTPUT 
 
                } 
 
       } 
 
} 
 
# All of this continues until I run out of Tapes, 
# Libraries, Recovery points and possibly Cheetos