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
}
$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!