Kürzlich stieß eine Freundin von mir auf das Problem, dass der VPS-Anbieter plötzlich und ohne Vorwarnung den Geschäftsbetrieb einstellte. Leider wählte sie aus Kostengründen einen Nischenanbieter – einen, der nicht einmal das Herunterladen von Daten anbot. Schlimmer noch, sie hat nicht die Gewohnheit, regelmäßig Backups herunterzuladen. Über Nacht verschwand ihre Website zusammen mit allen darauf befindlichen Daten.
Schockiert darüber schrieb ich ein Powershell-Skript, das automatisch regelmäßig Backups von Ihrem Server auf Ihren lokalen Computer herunterlädt, ohne dass Sie zusätzliche Objektspeicher-Dienste kaufen oder einen Cent für andere Dinge ausgeben müssen. Alles, was Sie brauchen, ist ein Windows-Computer, den Sie regelmäßig benutzen (und der über viel Festplattenspeicher verfügt) und der mit dem Internet verbunden ist.
Das Skript bereinigt automatisch Backups, die älter als 5 Tage sind. Sie können das automatische Backup-Intervall und die älteste lokal gespeicherte Backup-Zeit nach Ihren Bedürfnissen einstellen.
$ssh_port = 22
$ssh_address = "username@your.site"
Write-Output "Starte Discourse-Backup-Download-Aufgabe..."
Write-Output "------------------------"
Write-Output "Rufe die neueste Backup-Datei ab..."
Write-Output ""
while ($true) {
$filename = ''
while ($true) {
try {
Write-Output "> ssh -p $ssh_port $ssh_address 'cd /var/discourse/shared/standalone/backups/default/ && ls -t | head -n 1'"
Write-Output ""
$filename = ssh -p $ssh_port "$ssh_address" 'cd /var/discourse/shared/standalone/backups/default/ && ls -t | head -n 1'
break
}
catch {
$filename = ''
Write-Output "Fehler beim Abrufen... Hier ist das Protokoll:"
Write-Output "-------------"
Write-Output $_
$answer = Read-Host "Möchten Sie es erneut abrufen? (j/N)"
if ($answer -ne 'j') {
break
}
Write-Output ""
}
}
if ([String]::IsNullOrEmpty($filename)) {
Write-Output "Fehler: Konnte Dateiname $filename nicht abrufen"
Write-Output ""
$answer = Read-Host 'Erneut versuchen? (j/N)'
if ($answer -eq 'j') {
}
else {
exit 1
}
}
else {
Write-Output "Neuestes Backup: $filename"
Write-Output ""
$need_download = $true
if (Test-Path ".\backups\$filename") {
$answer = Read-Host ".\backups\$filename existiert bereits. Möchten Sie es erneut herunterladen? (j/N)"
Write-Output ""
if ($answer -ne 'j') {
$need_download = $false
}
}
if ($need_download) {
Write-Output "Starte Download..."
Write-Output ""
while ($true) {
try {
Write-Output "scp -p $ssh_port ${ssh_address}:/var/discourse/shared/standalone/backups/default/$filename .\\backups\\"
Write-Output ""
scp -p $ssh_port "${ssh_address}:/var/discourse/shared/standalone/backups/default/$filename" .\\backups\
Write-Output "Download abgeschlossen"
Write-Output ""
break
}
catch {
Write-Output "Download fehlgeschlagen >_<... Das Folgende ist das Protokoll:"
Write-Output ""
Write-Output $_
$answer = Read-Host "Nochmal herunterladen? (j/N)"
Write-Output ""
if ($answer -ne 'j') {
break
}
}
}
}
Write-Output "Starte Versuch, alte Backup-Dateien zu bereinigen..."
Write-Output ""
$count = 0
$backupfiles = Get-ChildItem -Path .\\backups\
foreach ($file in $backupfiles) {
if ($file.CreationTime -le (Get-Date).AddDays(-5)) {
try {
Write-Output "Lösche alte Backup-Datei $file ..."
Write-Output ""
$file.Delete()
$count = $count + 1
} catch {
Write-Output "Ein Fehler ist beim Löschen der alten Backup-Datei $file aufgetreten >_<"
Write-Output "-------------------"
Write-Output $_
Write-Output "-------------------"
}
}
}
if ($count -ge 0) {
Write-Output "$count alte Backup-Dateien bereinigt"
Write-Output ""
}
else {
Write-Output "Keine alten Backup-Dateien müssen bereinigt werden"
Write-Output ""
}
Pause
exit 0
}
}
Speichern Sie das obige Skript als scriptname.ps1 an dem Ort, an dem Sie das Backup herunterladen möchten. Versuchen Sie es mit “Mit Powershell ausführen”. Wenn erfolgreich, können Sie mit dem nächsten Schritt fortfahren.
Aufgabenplanung
- Suchen Sie nach “Geplante Tasks”.
- Doppelklicken Sie auf Geplanten Task hinzufügen. Der Assistent für geplante Tasks wird angezeigt.
- Klicken Sie auf Weiter und dann auf Durchsuchen. Das Dialogfeld Programm zur Planung auswählen wird angezeigt.
- Navigieren Sie zu dem von Ihnen erstellten Skript, klicken Sie darauf und dann auf Öffnen. Sie kehren zum Assistenten für geplante Tasks zurück.
- Geben Sie einen Namen für den Task ein oder behalten Sie den Standardnamen, der der Dateiname ist, und geben Sie an, wie oft das Skript ausgeführt werden soll, und klicken Sie dann auf Weiter.
- Geben Sie die Startzeit und das Startdatum (wenn Sie Täglich, Wöchentlich oder Monatlich usw. angegeben haben) und die Wiederholung an und klicken Sie dann auf Weiter. Dieser Punkt sollte dem automatischen Backup-Zyklus Ihres Discourse entsprechen
- Geben Sie den Benutzernamen und das Kennwort für das Konto ein, das das Skript ausführen wird, und klicken Sie dann auf Weiter.
- Wenn Sie erweiterte Eigenschaften konfigurieren möchten, wählen Sie das Kontrollkästchen aus und klicken Sie dann auf Fertig stellen.


