Gameserver-Backup via FTP und PowerShell lokal speichern

Alles Wissenswerte über Skripte, Browser, Makros, PhP, HTML...

Moderatoren: Moderatoren, Redakteure

Antworten
Horg
Beiträge: 3
Registriert: 17.03.2019 20:33
Persönliche Nachricht:

Gameserver-Backup via FTP und PowerShell lokal speichern

Beitrag von Horg »

Hallo 4Players-Gemeinde,

für eine automatisierte Sicherung der Game-Backups, welche 4players für die Gameserver erstellt, habe ich ein kleines PowerShell-Skript erstellt.
Das Skript benötigt zusätzlich noch die WinSCP-Bibliotheken (s.u.). Mit der Windows Aufgabenplanung könnt Ihr eine Aufgabe anlegen, welche den FTP-Download dann regelmäßig für euch erledigt.

Das PowerShell-Skript ist hinsichtlich ARK konfiguriert, sollte sich aber sehr leicht an Backups von anderen Gameservern anpassen lassen.

Generell wird bei jedem Download-Vorgang der komplette Inhalt wie in $remotePath eingestellt in den $localPath abgelegt, wobei noch ein Ordner mit dem aktuellen Tagesdatum, im Format YYYYMMDD, erstellt wird.

Installieren müsst ihr keine Software, aber WinSCP muss heruntergeladen und entpackt werden: WinSCP .NET assembly / COM library

Das nachfolgende Skript als Datei, z.B. 4playersbackup.ps1, lokal speichern.

Code: Alles auswählen

param (
    $localPath = "C:\temp\ARK_Backup\",
    $remotePath = "/xxxx/ShooterGame/Saved/*"
)

try
{
	# Load WinSCP .NET assembly
	Add-Type -Path "C:\temp\WinSCP\WinSCP-5.15.1-Automation\WinSCPnet.dll"

	# Setup session options
	$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
		Protocol = [WinSCP.Protocol]::Ftp
		HostName = "saves.4netplayers.de"
		UserName = "xx.xx.xx.xx"
		Password = "passwort"
	}

	$session = New-Object WinSCP.Session

	try
	{
		# Connect
		$session.Open($sessionOptions)

        # Format timestamp
        #$stamp = $(Get-Date -Format "yyyyMMddHHmmss")
		$stamp = $(Get-Date -Format "yyyyMMdd")

		# Donwload files
		$transferOptions = New-Object WinSCP.TransferOptions
		$transferOptions.TransferMode = [WinSCP.TransferMode]::Binary

        $session.add_QueryReceived( { 
            Write-Host "Error: $($_.Message)"
            $_.Continue()
        } )

		#$transferResult = $session.GetFiles("/552919/ShooterGame/Saved/*", "D:\temp\ARK\*", $False, $transferOptions)
		$transferResult = $session.GetFiles($remotePath,($localPath + $stamp + "\*"), $False, $transferOptions)
		

        # Throw on any error
        $transferResult.Check()
 
        # Print results
        foreach ($transfer in $transferResult.Transfers)
        {
            Write-Host "Download of $($transfer.FileName) succeeded"
        }
    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }
 
    exit 0
}
catch
{
    Write-Host "Error: $($_.Exception.Message)"
    exit 1
}
Folgende Pfade / Parameter müsst ihr manuell anpassen:
$localPath = Pfad wohin das Backup gespeichert werden soll
$remotePath = Pfad zu den Backup Ordnern/Dateien vom Server. WICHTIG: Der Pfad endet auf /* damit auch die Unterordner berücksichtigt werden.
Add-Type -Path = Pfad zur entpackten WinSCP-DLL
UserName: Euer FTP-User, normalerweise die IP-Adresse des Gameservers.
Password: Das Passwort für den FTP-User

Das Skript steht auch auf Pastebin für euch zur Verfügung: Pastebin

Wie man ein PowerShell-Skript in der Aufgabenplanung einrichtet wird hier recht einfach gezeigt.

Viel Spaß mit dem Skript und gutes Gelingen! :D
Antworten