In diesem Artikel zeige ich Dir, wie du mit recht wenig Aufwand einen selbst aktualisierenden Updater für den ECO-Server erstellen kannst.
ECO – Das Spiel kennen vermutlich einige, andere wiederum vielleicht auch nicht. Ich spiele nicht viel, da ich einen zwei Jahre alten Sohn habe und wir uns vor Kurzem auch ein 120 Jahre altes Haus gekauft haben, arbeit ist also genug da. Aber das Spiel, hat es mir wirklich angetan.
Kurz zusammengefasst, es ist Minecraft aber mit ökologischen und ökonomischen Faktoren. Dazu erfahrt ihr aber mehr wenn ich auf das Spiel detailliert eingehe. Den Artikel verlinke ich dann hier.
Für dieses Spiel habe ich einen eigenen Server auf Windows-Basis aufgesetzt. Die Server-Anwendung kann man entweder direkt bei Strange-Loop-Games nach dem Kauf herunterladen oder über Steam beziehen:

Der Download bei Strangeloop-Games nach dem Kauf
Den ECO-Server findet Ihr nach dem Kauf im Steam unter „Werkzeuge“Der direkte Download bei Strange-Loop-Games hat den Nachteil, dass diese Anwendung sich nicht neu installiert. Der Download im Steam hat den Nachteil, dass der Start des Servers als Sitzung gilt und man so entweder den Server killt wenn man spielen will, oder aber der Serverstart einen aus dem Spiel wirft. Steam aktualisiert aber die Dateien automatisch. Ziemlich blöd. Darum habe ich mir ein Skript erstellt, womit ich das beste aus beiden Welten habe.
Da ich meinen Spielern immer die aktuellste Version anbieten möchte, alleine schon aus dem Grund weil Steam immer alles updatet, ist das fast zwingend ein Muss.
Wir Ihr sicher schon gemerkt habe, arbeite ich für so kleinere Dinge meistens mit Skripten, ob nun Python oder Powershell, kommt immer auf das an was ich gerade vor habe. Ist es recht windowsspezifisch, nutze ich gerne die mächtige Powershell, soll es plattformunabhängig sein, dann lieber Python. Weil der Server nativ für Eco nur mit Windows läuft, bietet sich Powershell an.
Das Skript
Das Skript ist recht simpel und nutzt die SteamCMD, mit der man gewisse Befehle automatisieren kann. Mit einer geplanten Aufgabe im Windows läuft das sogar komplett autark. Zusätzlich verschicke ich auch noch über die Webhooks von Discord Meldungen, wenn der Updater startet und beendet ist. Wie du einen Webhook bei Discord einrichten kannst, erfährst du aus der Entwickler-Dokumentation von Discord.
Generell macht das Skript folgendes:
- Sichern der angegebenen Folder innerhalb des ECO-Servers (z.B.: die Confgs, Spielstände und Mods)
- Update des ECO-Servers via SteamCMD
- Zurücksichern der vorher gesicherten Stände (Kopieren)
Das Zurücksichern ist notwendig, da der ECO-Servers alle Dateien durchaus austauschen kann und daher unter Umständen Configs von Euch nicht mehr vorhanden wären.
## App-ID des ECO-Servers im Steam
$appid = 739590;
## Aktulle Zeit und Datum
$now = $((get-date).ToString("yyyyMMdd_hhmmss"))
## Log-Pfad und -Dateinamen für den Updater
$logPath = "C:\Log\EcoUpdater"
$logFileName = "$logPath\Updater_$now.txt"
## Pfad zum ECO-Server
$ecoServerPath = "G:\Games\Eco-Server"
## Pfad zur SteamCMD
$steamCMDPath = "C:\SteamCMD\steamcmd.exe"
## Discord-Webhook-URL
$hookUrl = "https://discordapp.com/api/webhooks/[Webhook ID]"
## Folder für die Backups
$backupFolder = "G:\Backups\EcoServer\Backup_$now"
## ECO-Server Prozessname
$processName = "EcoServer"
## Debug-Modus
$debug = $false
## Verzeichnisse innerhalb des Eco-Servers-Pfades welche gesichert werden sollen
$foldersToBackup = @("Configs","Storage","Mods\01 EIGENE")
## Message-Logger
function LogMessage($message){
$current = $((get-date).ToString("yyyyMMdd_hhmmss"))
Add-Content $logFileName "[$current]: $message"
}
## Funktion zum Senden von Nachrichten via Discord
function SendDiscordMessage($message, $toAll = $true){
if(!$debug){
LogMessage -message "Sending discord Message: ""$message"""
if($toAll){
$message = "@everyone $message"
}
Invoke-RestMethod -Uri $hookUrl -Method Post -Body ([PSCustomObject]@{content = $message} | ConvertTo-Json)
}
}
## Updater Start
LogMessage -message "------------- Updater started -------------"
LogMessage -message "Debug: $debug"
## ECO-Server beenden
LogMessage -message "Stopping process ""$processName"""
Stop-Process -Name $processName
## Log-Folder prüfen
If(!(test-path $logPath))
{
New-Item -ItemType Directory -Force -Path $logPath
LogMessage -message "Logpath: $logPath"
}
## Backup-Folder prüfen und anlegen
If(!(test-path $backupFolder))
{
New-Item -ItemType Directory -Force -Path $backupFolder
LogMessage -message "Backupfolder: $backupFolder"
}
## Folder sichern
LogMessage -message "Backing up folders"
foreach ($folder in $foldersToBackup){
$bPath = "$ecoServerPath\$folder"
if(!$debug){
If(test-path $bPath){
LogMessage -message "Backing up folder ""$bPath"" to ""$backupFolder"""
Copy-Item $bPath -Destination $backupFolder -Recurse
}
}
}
# Update starten
if(!$debug){
SendDiscordMessage -message "**[AUTO-UPDATE]**`nChecking for server updates and restart if needed`nhttps://media.giphy.com/media/syCa5ird7wp0c/giphy.gif"
}
LogMessage -message "Update: Starting via SteamCMD $steamCMDPath"
(Start-Process -FilePath $steamCMDPath -ArgumentList "+@ShutdownOnFailedCommand 1 +@NoPromptForPassword 1 +login anonymous +force_install_dir $ecoServerPath +app_update $appid validate +quit" -NoNewWindow -Wait)
# -RedirectStandardOutput $logFileName
LogMessage -message "Revert backuped files"
# Folder zurückspielen
foreach ($folder in $foldersToBackup){
$bPath = "$backupFolder\$folder"
if(!$debug){
If(test-path $bPath){
LogMessage -message "Revert backuped files from ""$bPath"" to ""$ecoServerPath"""
Copy-Item $bPath -Destination $ecoServerPath -Recurse -Force
}
}
}
LogMessage -message "Starting EcoServer"
Start-Process -FilePath "$ecoServerPath\Ecoserver.exe"
SendDiscordMessage -message "**[AUTO-UPDATE]**`nUpdate done`nhttps://media.giphy.com/media/l0NhZ0aUSE8fXag12/giphy.gif"
LogMessage -message "------------- Updater ended -------------"
Viel Spaß mit dem Skript und lass mich wissen, ob es dir hilft 🙂
Falls du auch ECO spielst und auf der Suche nach einem Server bist, würde ich mich freuen wenn ich dich in unserer Community und auf unserem Server begrüßen könnte:
Mehr Artikel entdecken
Office365-Postfach im Hybrid-Modus mit Powershell löschen
Immer mehr und mehr Unternehmen wechseln zu Office365, der kollaborativen Lösung von Microsoft für den täglichen Office-Gebrauch, angefangen von Word bis hin zu einem Exchange-Server. In unserem Unternehmen haben wir nun langsam auch vor, unseren internen Exchange-Server durch einen bei Office-365 zu ersetzen, wollen aber nicht auf die Vorzüge von
Wordpress zu Ghost Migration
Wieso und warum ich von WordPress zu Ghost gewechselt bin, erkläre ich dir hier 🤙
Wie ein Newsletter-System dir Zeit sparen kann
Wie ein Newsletter-System das nerviges Anschreiben von einer Vielzahl an Empfänger einfach zu einem Traum machen kann 🥂
Threads-API ist da
Ich zeige dir wie du die API von Threads nutzt um Posts automatisiert zu generieren 🎉
Home Assistant mit WebHooks automatisieren
Automationen in Home Assistant durch externe Systeme feuern 🚀 Ich zeig dir wie es geht!
Heizungen automatisiert ein- und ausschalten
Du willst deine Heizungsthermostate automatisiert steuern über Tür und Fensterkontakte in Home Assistant? Ich zeig dir wie es geht 🎉