Immer wieder fragen mich Kunden, ob nicht der DPM nach seiner Sicherung das Band auswerfen könnte. Bis jetzt musste ich das immer mit einem NEIN beantworten, aber es gibt eine Lösung.
Folgendes Script habe ich nur bei Standalone Tape Drives getestet, und es wirft das Band aus dem Slot tatsächlich aus.
Es wird aktuell nicht geprüft ob die Sicherung erfolgreich war oder nicht, sondern es wird einfach das Band ausgeworfen, ohne Rücksicht auf den Status der Bandsicherung.
Es wird ein kleines Tool dazu benötigt, das den eigentlichen Auswurf durchführt, mittels PowerShell holen wir uns die notwendigen Daten und starten diese Datei mit den nötigen Parametern.
Das Tool
Das Tool nennt sich “devioctl.exe” und kann hier heruntergeladen werden: devioctl.zip
die Hilfe liefert uns folgendes Ergebnis zurück
Somit würde unser Aufruf wie folgt aussehen.
devioctl.exe eject \\.\Tape2147483646
Wobei hier der String nach “devioctl.exe eject” immer wieder unterschiedlich sein wird, deshalb habe ich das ganze in ein PowerShell Script gepackt, welches den benötigten String aus unserem DPM ausliest und dementsprechend das Kommando ausführt.
Das Script
Ziel soll es sein die Tape Adresse herauszufinden und danach die Exe dementsprechend zu starten.
Folgender Befehl bringt uns schon mal den gewünschten Teil
get-dpmlibrary -dpmservername $DPMServerName | get-tapedrive | select *
Das Ergebnis sollte wie folgt aussehen
Der Wert AccessPath ist genau das was wir benötigen, somit sieht das fertige Script danach so aus.
######################################################## # Name: EjectTape.ps1 # Creator: Michael Seidl aka Techguy # CreationDate: 26.11.2014 # LastModified: 26.11.2014 # Version: 1.0 # Doc: https://www.techguy.at/tag/ejecttape/ # # Description: Can be used to eject a tape from # a Standalon Tape Drive connected to SCDPM # after ejecting the Tape, Inventory will be started # # # Variables # Location: where your Exe File is saved # # DPMServerName: Name of your DPM Server, standard will # take local computername # # Exe: Name of devioctl.exe # # Version 1.0 - RTM ######################################################## # # www.techguy.at # www.facebook.com/TechguyAT # www.twitter.com/TechguyAT # michael@techguy.at ######################################################## #*============================================= #* IMPORT MODULES #*============================================= # Module: DataProtection Manager Import-Module DataProtectionManager #*============================================= #* VARIABLE DECLARATION #*============================================= # Variables: Config $Location="C:\_Scripts\EjectTape" $Exe="devioctl.exe" $DPMServerName="$env:computername" $TapeDrive=get-dpmlibrary -dpmservername $DPMServerName | get-tapedrive | select * $Expression = $Location+"\"+$Exe +" EJECT "+$TapeDrive.AccessPath Invoke-Expression $Expression get-dpmlibrary -dpmservername $DPMServerName | Start-DPMLibraryInventory -DetailedInventory
Das Script nun wie hier beschrieben als Task einrichten:https://www.techguy.at/scdpm-powershell-scripts-automatisieren/
TechNet Gallery Download
Download auf der TechNet Gallery: https://gallery.technet.microsoft.com/Eject-Tape-with-PowerShell-36fa7509
Solltet ihr Fragen, Wünsche oder Probleme mit dem Script haben, schreibt mir ein Kommentar
Alle meine TechNet Gallery Downloads findet ihr hier: 1jrYQoA
BITTE BEWERTET MEINE DOWNLOADS IN DER TECHNET GALLERY UND SAGT MIR WAS IHR EUCH VON DER NÄCHSTEN VERSION WÜNSCHT.
Michael Seidl aka Techguy
Der AccessPath meines IBM Single Tape Drives lautet \\.\Tape0 und wenn ich das Script ausführe, kommt folgende Fehlermeldung:
\\.\Tape0: The filename, directory name, or volume label syntax is incorrect.
Keine Ahnung, warum das nicht geht..
mhm, spannend. wie viele Tapes bekommst du als Rückgabe, nur das eine?https://www.techguy.at/wp-admin/edit-comments.php?p=4700&approved=1#comments-form
Hi, \\.\Tape3231025 hat bei mir auch nicht funktioniert. Wenn ich die Sonderzeichen allerdings entferne, dann funktioniert es. Ich habe das Powershellskript um ein Replacekommando erweitert.
$StringTapeDriveName=$TapeDrive.AccessPath -replace ‘[\W]’,”
Danke, hab das für die nächste Version notiert.