New Blog

Dear reader,

To work more inline with my twitter activities and to open my blog for more interessting stuff (not just Veeam related), I am blogging only on the http://andyandthevms.com/ blog from now.

If I will write some updates at individual posts (e.g. Exchange Backup stuff) I will add an warning message with a link to the article on this blog.

So do not hesitate to check out my new blog under http://andyandthevms.com

Thanks for all the Feedback and support

Andy

Dienstag, 16. August 2011

Traue keinem unabhängigen Test bei dem du nicht selbst die Testkriterien festgelegt hast

Hallo zusammen :-)

wie heißt es doch so schön... "Traue keiner Statistik, die du nicht selbst gefälscht hast". Auf die heutige IT Welt übertragen könnte man auch sagen: "Traue keinem unabhängigen Test bei dem du nicht selbst die Testkriterien festgelegt hast".

Was macht ein Hersteller wenn er mit dem innovativeren Mitbewerberprodukt nicht mithalten kann? Er nimmt etwas Geld in die Hand, sponsort einen "unabhängigen" Prüfungsfirma die einen "neutralen" Produktvergleich erstellt und gebe Ihr einen auf das eigene Produkt zugeschnittenes Portfolio an Testkriterien mit der passenden Gewichtung an die Hand. Sobald der Report erscheint, nehme ich noch mehr Geld in die Hand und veranstalte einen riesen Presse-/Marketingzirkus rundherum.

Veeam erwartet in den nächsten Tagen noch vor unserem nächsten Backup & Replication Release eine Kapagne gegen sich.
Siehe hierzu:
http://www.veeam.com/blog/oh-tolly.html

Ein Beispiel, was bei dem Produktvergleich essentielles nicht bewertet wird:
Was fordern die Backupprogrammhersteller seit über 20 Jahren?
Testen Sie regelmäßig den Restore Ihrer Backups!
Kennen Sie jemand der dies regelmäßig oder gar bei jedem Backup umgesetzt hat? Die meisten scheuen die Zeit und Kosten.

Veeam automatisiert den Restoretest erstmalig am Markt mit seiner "SureBackup" Funktion. Ein Produktvergleich, der diese seit 20 Jahren geforderte Funktion nicht berücksichtigt ist schlicht nicht objektiv.

Liebe Leser vertraut nicht auf die Marketingaussagen der Hersteller, testet die Produkte und bildet euch selbst ein Urteil. Falls Sie hierbei Unterstützung brauchen helfen Ihnen meine Kollegen und ich sehr gerne.

...


Ist Ihnen schon einmal Aufgefallen, dass andere Hersteller auf Ihren Vorstellungsterminen Veeam spezifisch ansprechen und Punkte wie "Veeam kann nicht einmal seinen eigenen Backupserver sichern!" oder "Da wir auf dem ESX(i) System ein eigenes Stück Software starten können wir schneller sichern als Veeam" herausstellen?

Wenn es so einfach wäre Veeam in Bedrängnis zu bringen, dann hätte ich nicht den Job bei Veeam angetreten. Dass diese zwei am heufigsten genannten "Einschränkungen" eben keine "Einschränkungen" sind, sondern einfach nur falsch gestreute Marketinginformationen, möchte ich anhand dieser zwei Beispiele kurz aufzeigen:

"Veeam kann nicht seinen eigenen Backupserver sichern."
Stellen Sie sich vor, an Ihrem Backupserver würde das Betriebssystem kaputt gehen und alle Backupdaten die auf dem Server liegen sind verloren. Was würde dies bei anderen Herstellern im Wiederherstellungsfall bedeuten. Richtig Sie müssten warten bis das Betriebssystem samt Ihrer Daten wiederhergestellt sind (mehrere Studen/Tage). Ein (virtueller) Veeam Backup & Replikationserver der mit selbigem Produkt gesichert wurde, kann innerhalb von ungefähr 5 Minuten von seinem Backup gestartet werden. Dieser vom Backup gestartete Backup&Replikation Server kann wiederum einen oder mehrere ausgefallene produktive Server in wiederum ungefähr 5 Minuten vom Backup starten. Ein schnelleres Restore Szenario kenne ich bei Ausfall des kompletten Backupservers bzw. dessen Disksystem nicht. Und wenn wir schon dabei sind... Sie können sich auch sicher sein, dass der Backupserver wirklich vom Backupfile startet, weil wir die Wiederherstellbarkeit des Backupfile mit unserer SureBackup Funktion bereits automatisiert nach dem Backup geprüft haben. ;-)

"Ja aber wenn der Backupserver nicht virtualisiert wurde, kann Veeam sich selbst nicht sichern." Mmmmh? Auch diese Aussage stimmt so nicht. Die Wiederherstellung etwas ausführlicher erläutert:
Veeam Backup & Replikation Server bestehen aus 4 Teilen:
- dem Betriebssystem
- dem Veeam Backup & Replikation Programmverzeichnis
- einem MS SQL Server der nur die Jobinformationen und deren Planungszeiträume enthält
- die Backupdatenfiles

Da weder das Betriebssystem noch das Veeam Backup & Replikation Programmverzeichnis spezielle Einstellungen enthält, brauchen diese nicht zwingend gesichert werden.

Die Backupdatenfiles sind für sich alleine ohne die SQL Datenbank verwendbar. Sie können auf ein anderes Disk-System kopiert werden oder auf Tape ausgelagert werden.

Die SQL Datenbank läuft in einer virtuellen Maschine und wir sichern diese mit unserem Produkt.

Restore - wenn ein physikalischer Veeam Backup & Replikation Server ausgefallen ist:
Man nehme einen Rechner mit Windows (zur Not ein Notebook) diesem verschaffe man Zugriff auf die kopierten Backupfiles. Installiere ein naktes Backup & Replikation (Wizard einfach durchklicken) und importiere die Backupfiles des von Veeam verwendeten SQL Servers in kürzester Zeit.
Stelle danach den SQL Server her (wenige Minuten da die SQL Datenbank sehr klein ist und nur Jobdefinition und deren Zeitpläne enthält). Anschließend verbinde ich den neuen Backup & Replication Server zum SQL Server und alle Jobinformationen liegen wieder vor. Sind auf dem neuen Backup & Replikation Server die Verzeichnisse zu den kopierten Backupfiles an anderen Orten, müssen die Verweise auf die Ordner in den Jobs noch angepasst werden.

Schon bin ich in der Lage jeden produktiven Server vom Backupserver in nur 5 Minuten per Instant Restore zu starten.

Will ich nur die produktiven Server von den Backupfiles schell wiederherstellen, kann ich den zwischenschritt mit der Wiederherstellung des SQL Servers auch auslassen:
- Naktes Windows installieren oder ein bestehendes verwenden
- Backup und Replikation Server installieren und Backupfiles zugreifbar machen.
- Backupfiles importieren
- Starten eines importierten Servers in ungefähr 5 Minuten mit Instant Restore ab hier wieder möglich.

Und warum soll gleich Veeam jetzt seinen eigenen Server nicht sichern können?


Das letzte Argument:
"Da wir auf dem ESX(i) System ein eigenes Stück Software starten können wir schneller sichern als Veeam".
Mmmh...komisch ... Ihnen will hier jemand weis machen, dass der Datenabzug über ein Stück Software welches auf VMware ESX(i)läuft und durch dessen I/O Stack 2x durch muss (lesen der zu sichernden Daten + schreiben der zu sichernden Daten)schneller ist, als wenn Veeam die Daten direkt am Backupserver ohne ESX Beteiligung über das SAN vom primären Disk-Subsystem abzieht. Urteilen Sie selbst.

Und wenn wir schon dabei sind... Ja, auch Veeam hat ein solches Stückchen Software, welches Sie alternativ verwenden können. Ja, vielleicht braucht Veeam einen Tick mehr Zeit für diese "Virtual Appliance" Sicherung. Veeam bringt jedoch zunächst die Applikationen konsistent und nicht nur das Betriebssystem. Wie gesagt, dies ist eine Alternative zu dem schnelleren Direkt SAN Access Backup Modus.

Haben Sie auf Veranstaltungen oder bei Produktvorstellungen negative Aussagen zu Veeam Produkten gehört? Schreiben Sie mir, ich freue mich über jede E-Mail. Gerne führe ich Ihnen Live unsere Produkte und die angesprochenen als "negativ" dargestellten Funktionen vor, damit Sie sich ein eigenes Urteil bilden können. Meine E-Mail andreas.neufert(at)veeam.com

Liebe Grüße
Andreas Neufert

Andreas Neufert ist Systems Engineer Central Europe bei Veeam Software

Donnerstag, 11. August 2011

Cooles Notebook + Coole SSD = Datenverlust... Thinkpad W510 + SandforceSSDs Corsair Force3 / OCZ Vertex 3 + HDD Passwort Problem

Nein es ist noch nicht schon wieder Wochenende.
Ich ärgere mich nur gerade zu tode.

Was passiert, wenn man ein ultra schnelles Notebook mit einer ultra schnellen SSD ausstatten will und man es wagt ein HDD Kennwort zum Zugriffsschutz der Daten zu setzten?

Richtig, ...mann kommt nicht mehr an seine Daten.

Es wäre ja nicht so, dass die HDD Kennwort Funktion schon seit über 10 Jahren im Markt verfügbar wäre und es überraschend für die Hersteller ist, dass diese Funktion genutzt wird.


Der Reihe nach:
Ich betreibe zur Zeit an meinem Thinkpad W510 eine OCZ Vertex 2 Platte (SandForce SF-1200 Controller) und eine Intel SSD. Beide sind mit einem Standard HDD Kennwort versehen, um zu verhindern, dass wenn jemand mein Notebook entwendet, er einfach so an meine Daten kommt. (Ist zwar keine Verschlüsselung aber zumindest ein Schutz, um all diejenigen mit wenig Budget abzuhalten an meine Daten zu kommen.)

Aus Platzgründen wollte ich mir eine größere SSD anschaffen, die dazu noch das maximale an Durchsatz bietet (auch wenn der Controller des Thinkpads dies nicht zwingend schafft).

Meine Wahl viel auf die Corsair Force3 mit dem brandaktuellem Sandforce SF2200 Controller. Nach erhalt sofort verbaut ein weilchen gearbeitet und bevor ich das erste mal das Haus verlassen habe, noch schnell das HDD Kennwort gesetzt. Beim Kunde das Notebook eingeschalten, HDD Kennwort eingegeben und die Präsentation erfolgreich beendet. Zuhause das Notebook wieder eingeschaltet => Kennwort wird nicht mehr akzeptiert.
Schreibfehler? Hochstelltaste? Eine Taste ohne Funktion? Habe undgefähr 200 Kombinationen ausprobiert. Nach einigem hin und her, habe ich mich damit abgefunden, dass meine Daten weg sind und die SSD an den Service gesendet.

Austauschplatte nach 2,5 Wochen erhalten. Selbes Problem.
HDD akzeptiert nach dem setzten des Kennworts das HDD Kennwort genau ein einziges mal.
Forum von Corsair gelesen => Ich bin nicht alleine.

Händler angerufen und mit Ihm vereinbart, dass er mir zum Austausch eine OCZ Vertex 3 (ebenfalls Sandforce SF2200 Controller) sendet.
Nach wiederum 2,5 Wochen bin ich jetzt stolzer besitzer einer Vertex 3... sie ahnen es ... mit dem selben Fehler.

Im OCZ Forum finden sich noch mehr Hinweise auf eine Inkompatibilität mit Lenovo.

Ein klassisches Spiel beginnt. Ist jetzt Lenovo schuld, wie der OCZ Support suggeriert? Mein Bauchgefühl sagt mir, dass es nicht an Lenovo liegt. Meine anderen SSDs (auch die Vertex 2) laufen noch. Weiterhin war ich mal für den Service von über 40.000 Lenovo Thinkpad Notebooks verantwortlich, bei denen kein einziger mit HDD Kennwörtern und irgend welchen HDDs Probleme angemeldet hat. Ich vermute stark einen Fehler im selben Controller der SSDs.

BTW. der Preis der SSD ist inzwischen auch um 100€ gefallen.

Was bleibt... kauft nur original SSDs als Optionsteil von Lenovo.
Damit umgeht Ihr das Fingerzeigen der Hersteller.

Ich halte euch auf dem Laufenden wie es weiter geht ;o)

Freitag, 5. August 2011

Einführung in die Veeam Powershell

Ein neues Wochenende ... ein neuer Beitrag.
In der vergangenen Wochen bin ich immer wieder auf 2 Themen von Kunden angesprochen worden.
1. Ich würde gerne ein Backup Skript erstellen, wie finde ich am besten den Einstieg?
2. Bei der Near-CDP Replikation (Replikation startet sofort nach dessen Beendigung wieder) würde ich diese gerne anhalten um ein Backup zu erstellen. Wie kann ich dies steuern?

Somit kombiniere ich einfach diese beiden Anforderungen in diesem Tutorial. Viel Spaß beim lesen und viel Erfolg beim umsetzten.

Die hier gezeigten Beispiele müssen nicht zwingend in Ihre Umgebung passen. Bitte prüfen Sie den gesamten Code sorgsam bevor Sie Ihn in einer Testumgebung einsetzten. Prüfen Sie hier ob alles soweit funktioniert, keine Fehler auftreten und ob die Replikationsziele und Backups auch die passenden Daten aufweisen. Das Backup kann z.B. mit einem SureBackup Job geprüft werden und die Replikation in dem Sie die Replik der Server aus Backup & Replikation heraus ohne Netzwerkkarten (im VCenter abhängen) starten. Bitte nicht die Replik mit dem vCenter starten, hierbei werden alle übrigen Replikationsstände verworfen. Wenn Sie sich dann sicher fühlen, kann der Code in der produktive Umgebung übernommen werden. Der Author dieses Beitrags haftet nicht für eventuell auftretenden Datenverlust. Prüfen Sie Ihre Arbeit auf jedenfall gegen!!!! Als Testumgebung können Sie z.B. einen Ihrer Windows Server mit der SureBackup Funktion in ein Virtual Lab starten, dort Backup & Replication erneut installieren und den Code testen.

Anforderungen:
Aktuelle Veeam Backup & Replication Version
Falls Sie Windows 2003 Server einsetzten muss von Microsoft noch die Powershell nachinstalliert werden.
Die Skripte funktionieren nur direkt auf dem Backupserver.

Grundüberlegung und Ausgangssituation:
Wir haben einen Replikationsjob Namens SQL-REPLIKATION der zeitgesteuert oder kontinuierlich einen oder mehrere Server repliziert. Ein weiterer Job sichert als Backupjob die selben Server. Jobname hierfür SQL-BACKUP.
Ziel ist es
1. Den SQL-REPLIKATION Job anzuhalten, bzw. diesen fertig durchlaufen zu lassen.
2. Ein Backup mit SQL-BACKUP zu erstellen.
3. Anschließend den Replikationsjob wieder zu starten und zu prüfen ob die Replikation wieder angelaufen ist.

Grundüberlegungen zum Code:
Wir erstellen eine Powershell-Skriptdatei (*.ps1) die den Code aufnimmt.
Eine weitere "Start"-Datei (*.ps1 oder *.bat) die Parameter an die Powershell-Skriptdatei übergiebt.

Wir benötigen 2 variable Werte die wir an die Skriptdatei übergeben:
Replikationsjobname
Backupjobname
dateiname.ps1 -parameter1 wert1 -parameter2 wert2

# In unserem Fall
dateiname.ps1 -jobname SQL-REPLIKATION -backupjobname SQL-BACKUP

Erstellung der Startdatei:
Erstellen Sie mit dem Windows Editor eine Textdatei mit der Endung .bat .
Legen Sie diese in ein Verzeichnis ab. Editieren Sie diese mit dem Editor.

Zunächst erstellen wir in der Datei 5 Variable die wir mit folgendem füttern:
1. Parameter für den Pfad zur Powershell-EXE von Windows
2. Pfad zu der noch zu erstellenden PS1 Datei
3. Replikationsjobname
4. Backupjobname
5. Pfad zur Logdatei.

REM  PowerShell.exe
set powershell="c:\windows\system32\windowspowershell\v1.0\powershell.exe"

REM  Set Folder with the VBRStopCDPStartBackupRestartCDP.ps1 in it
set PS1=E:\Backups\VBRStopCDPStartBackupRestartCDP.ps1

REM Set CDP Jobname
set REPLIKATION=SQL-REPLIKATION

REM Set Backupjobname
set BACKUP=SQL-BACKUP

REM Output LOG
set joblog=E:\Backups\VBRStopCDPStartBackupRestartCDP.log


Danach erstellen wir die eigentliche Ausführungszeile die die Parameter im richtigen Kontext aufruft. ">>" bedeutet, dass in der Log Datei alle neuen Ereignisse immer angehängt werden.
Eventuell wird diese Log Datei über die Monate zu groß und Sie müssen das Skript später anpassen.
"%powershell%" "%PS1%" -jobname "%REPLIKATION%" -backupjobname "%BACKUP%" >> "%joblog%"

Grundlagen Powerhellskript
Write-Output "Text"
gibt einen Text aus. Bei uns ist die Ausgabe mit >> in eine Log Datei umgelenkt. Somit bleibt das Skriptfenster einfach schwarz.

$AStartTime =
setzt eine Variable mit dem Wert der hinter dem Gleich kommt. Diese Variable kann dann an beliebiger Stelle im Code mit
$AStartTime
wieder abgerufen werden.

$variable.irgendetwas
Bietet die Möglichkeit Erweiterungen der jeweiligen Variablen abzufragen.

z.B.:
Wenn wir den Veeamjob in die variable "&infodisjob" geschrieben haben, können wir mit
$infodisjob.Info.IsScheduleEnabled
abrufen, ob der Scheduler des Jobs enabled ist.

Hierbei wird .Info.IsScheduleEnabled durch Backup & Replication definiert, sprich dies ist keine direkte Funktion der Powershell.

Wo stehen jetzt die ganzen Möglichkeiten der Funktionen?

Zunächst kann in der Powershell eine Übersicht aller Veeam Befehle abgerufen werden.
add-pssnapin veeampssnapin
get-command -pssnapin veeampssnapin

Mit
get-help Veeambefehl -full
erhalten Sie alle Informationen über den Befehl.

Befehle, Informationen und Einstellungen zu den Jobs können Sie wie folgt abrufen:
$job = Get-VBRJob | ?{$_.name –eq “Jobname”}
$job | gm


Sie können eine oder mehrere Ebene tiefer springen in dem Sie einen der Befehle aus der Liste mit einem Punkt hinzufügen und z.B. folgendes aufrufen:
$job = Get-VBRJob | ?{$_.name –eq “Jobname”}
$job.getvssoptions | gm
$job.getvssoptions() | gm


Hierbei liefert der Befehl mit und ohne Klammern andere Werte.

In dem Userguide und in dem Veeam Forum finden Sie weitere Beispiele und Optionen. Warum sich Plagen wenn schon andere sich die Arbeit gemacht haben :-)
Am besten bei Google eingeben "+site:veeam.com +forum +powershell +Suchbegriff"

Übrigens finden Sie dort auch Hilfe bei Codefragen. Hierbei gillt wie immer: Zuerst die Suche verwenden, das gefundene auch Auswerten und dann Fragen stellen.

Die Skriptdatei
Erstellen Sie z.B. mit dem Windows Editor eine leere Datei mit der Endung .ps1.
Editieren Sie diese Datei mit einem Powershell Editor oder dem Windows Editor.

Und schon geht es mit der eigentlichen Arbeit los:

Übergabewerte mit param definieren:
param ([string]$JobName, [string]$BackupJobName)

Startzeitpunkt für das Log in eine variable einlesen und passend formatieren:
$AStartTime = get-date
$AStartTimeFormated = $AStartTime.ToUniversalTime()
Um Veeam befehle in der Powershell verwenden zu können müssen wir zunächst ein Veeam Powershell Plugin laden, welches mit Backup&Replication installiert wurde (Code stammt von Veeam Matt Carpenter´s PSHelperv1 Kit):
# Load Veeam Powershell Snapin 
Add-PSSnapin -Name VeeamPSSnapIn -ErrorAction SilentlyContinue

Wir prüfen jetzt ab ob der Backupserver auch ein Veeam Backup&Replication Server ist. Wir verwenden IF ELSE um eine Fehlermeldung auszugeben oder den restlichen Code auszuführen. Die } Klammer muss ganz am Schluss Ihres Code angebracht werden, da wir ja den restlichen Code nur ausführen wollen wenn der Server auch ein Backup & Replication Server ist.(Code stammt von Veeam Matt Carpenter´s PSHelperv1 Kit):
$BackupServer = Get-VBRlocalhost

IF ($BackupServer -eq $NULL)
{
Write-Output "There is an issue with the local Veeam Backup instance"
}
ELSE
{ 
Hier steht Ihr restlicher Code
}
Nun steht eine Prüfung der beiden übergebenen Job Parameter an. Sind diese auch im Backup&Replication als Jobs vorhanden. Auch hier wiederum brauchen wir zwei } am ganz unteren Ende des Codes(Code stammt von Veeam Matt Carpenter´s PSHelperv1 Kit).

$BackupJobCheck1 = Get-VBRJob | where {$_.Name -eq $JobName}


IF ($BackupJobCheck1 -eq $NULL)

{
Write-Output "Cannot start Veeam Job"
Write-Output "$JobName does not exist"
}

ELSE
{

$BackupJobCheck2 = Get-VBRJob | where {$_.Name -eq $BackupJobName}


IF ($BackupJobCheck2 -eq $NULL)

{
Write-Output "Cannot start Veeam Job"
Write-Output "$BackupJobName does not exist"
}

ELSE
{
Hier steht Ihr restlicher Code
}}

Jetzt der Bereich in dem wir den Ausführungszeitplan (Scheduler) des Replikationsjobs anhalten.
1. Wir schreiben die Zeit ins Logfile.
2. Wir schreiben, was wir ausführen ins Logfile.
3. Name des Replikationsjobs festlegen.
4. Halte den Scheduler an.
5. Lies nochmals den Replikationsjob ein, um aktuelle Statuswerte zu erhalten.
6. Setze eine Variable mit dem Wert "None" welches dem Wert des ausgeschalteten Schedulers entspricht (Diesen werden wir später verwenden)
7. Prüfe ob der Scheduler eingeschaltet ist.
8. Gebe das Ergebnis in das LOG aus.
Write-Output "Job started: $AStartTimeFormated"
Write-Output "Disabling Veeam Backup/Replication Job $JobName"
$disjob = Get-VBRJob | where {$_.name -eq $Jobname}
$disjob.DisableScheduler()
$infodisjob = Get-VBRJob | where {$_.name -eq $Jobname}
$disjobendstatus = "None"
$infodisjobanzeigeend = $infodisjob.Info.IsScheduleEnabled
Write-Output "Actual Status of the Veeam $Jobname Job: $infodisjobanzeigeend"

Eventuell ist jetzt noch immer ein Replikationsjob aktiv - wenn wir z.B. den Zeitplan mitten in der Ausführung angehalten haben. Wir warten in einer Schleife die Beendigung des letzten Jobs ab. Löschen Sie nicht die Zeile mit dem Get-VBRJob heraus, da Sie sonst bei Info.LatestStatus nicht den dann aktuellen Wert angezeigt bekommen.
DO{
$infodisjob = Get-VBRJob | where {$_.name -eq $Jobname}
Write-Output "Waiting until the Veeam $Jobname Job is finished. Waiting 10 seconds"
Start-Sleep -s 10
}
UNTIL ($infodisjob.Info.LatestStatus -ne $disjobendstatus)

$infodisjobanzeige = $infodisjob.Info.LatestStatus
Write-Output "The last state of the Veeam $Jobname Jobs was: $infodisjobanzeige"

Kaum sind wir aus der Schleife heraus, ist es an der Zeit den Backup Job auszuführen.
1. Schreiben in das Log was wir tun
2. Abrufen der Job Parameter
3. + 4. Starten des Backup Jobs (Geht theoretisch auch kürzer - dann können wir aber nicht die nun folgenden Werte in Variablen speichern (5. - 12.), um Sie später auszugeben. (Code stammt von Veeam Matt Carpenter´s PSHelperv1 Kit):
Write-Output "Start Veeam Backup Job $BackupJobName"
$BackupStartJob = Get-VBRJob | where {$_.Name -eq $BackupJobName}
$RunBackupStartJob = $BackupStartJob | Start-VBRJob
$RunBackupStartJob
$BackupStartJobResult = $RunBackupStartJob.Result
$JobDuration = $RunBackupStartJob.info.progress.Duration
$JobAvgSpeed = $RunBackupStartJob.info.progress.AvgSpeed
$JobVMSize = $RunBackupStartJob.info.progress.TotalSize
$JobVMSizeG = $JobVMSize/1GB
$JobAvgSpeedMB = $JobAvgSpeed/1MB
$JobAvgSpeedT = [System.Math]::Round($JobAvgSpeedMB, 0)
$JobVMSizeT = [System.Math]::Round($JobVMSizeG, 2)

Beinahe fertig...
Der Scheduler muss wieder gerstartet werden und es muss geprüft werden, ob die nächste Replikation auch wirklich startet. Anmerkungen:
-ne bedeutet "nicht"
Get-VBRJOB wiederum drin lassen, damit wir weiter unten den dann aktuellen Wert bei Info.IsScheduleEnabled abrufen können.
Write-Output "Enabling Veeam Backup/Replication Job $JobName again"
$ScheduleStatus = $infodisjob.Info.IsScheduleEnabled
if ($ScheduleStatus -ne "True"){
DO{
$infodisjob = Get-VBRJob | where {$_.name -eq $Jobname}
$disjob.EnableScheduler()
$ScheduleStatus = $infodisjob.Info.IsScheduleEnabled
Write-Output "Wait 30 Seconds"
Start-Sleep -s 30
}
Until ($ScheduleStatus -eq "True")
Write-Output "Is the scheduler enabled again and at least 1 job has started: $schedulestatus"

Ausgabe ins Log der Ergebnisse mit alternativem Endergebnis im Log über IF ELSE gelößt.(Grundidee des Codes stammt von Veeam Matt Carpenter´s PSHelperv1 Kit mit Anpassungen von mir):
Write-Output ""
Write-Output ":::::::::::::::::::::::::::::::::::::::::::::::::::::::" 
Write-Output ":::::::::::::::::::::::::::::::::::::::::::::::::::::::" 
Write-Output "::: Final Job Results Part Summary :::" 
Write-Output ":::::::::::::::::::::::::::::::::::::::::::::::::::::::"
$AEndTime = get-date
$AEndTimeFormated = $AEndTime.ToUniversalTime()
Write-Output "Job started at $AStartTimeFormated"
Write-Output "Job finished at $AEndTimeFormated"
Write-Output "Temporary disabled Job Name is $JobName"
Write-Output "Is now active again: $schedulestatus"
Write-Output "Backup Job Name is $BackupJobName"
IF ($BackupStartJobResult -eq "Success")
{  
Write-Output "Veeam Backup Job $BackupJobName completed successfully" 
}
ELSE
{
Write-Output "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
Write-Output "ERROR ERROR ERROR ERROR ERROR ERROR ERROE"
Write-Output "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
Write-Output "Error: Veeam Backup Job $BackupJobName result: $BackupStartJobResult"
Write-Output "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"    
}
Write-Output "Backup Job duration was $JobDuration"
Write-Output "Backup Job average throughput was $JobAvgSpeedT MB/s"
Write-Output "Virtual Machines in Backup Job $JobName totaled $JobVMSizeT GB in size"
Write-Output ""

Jetzt fehlen nur noch die gangen } von oben.
}
}
}
}


Man könnte den Code an der einen oder anderen Stelle noch verbessern.
Z.B. wäre es eine Möglichkeit für das Log die Zeitstempel vor und nach jedem Teilschritt einzubauen. Weiterhin fehlen Benachrichtigungen an Administratoren die bei bestimmten Ereignissen benachrichtigt werden. Thema E-Mail, Netzwerkmeldungen, Event Log Eintrag, Übergabe an EMS Systeme... dies ist dann zu individuell um es hier zu behandeln.

Viel Spaß beim Umsetzten, Testen !!! und Verbessern.

Es wäre nett wenn Sie Ihren angepassten Code hier als Kommentar veröffentlichen. Code Zeilen können Sie mit http://formatmysourcecode.blogspot.com/ als solchen einbauen.

Grüße Andreas Neufert

Update 09.09.2011:
Backupdatenmenge anhand der Powershell errechnen: http://ict-freak.nl/2011/08/30/veeam-calculate-destination-storage-needs-with-powershell/ "

Dieses Blog durchsuchen