Da die fleißigen ARK-Entwickler ihre Updates in sehr kurzen Intervallen veröffentlichen, sollte euch folgendes Skript als Serveradministrator hoffentlich stark entlasten. Dieses wurde mit Hilfe der Windows PowerShell erstellt und benötigt dieses mindestens in der Version 3.0! Es warnt die Spieler vor dem Update und lässt ihnen 10 Minuten Zeit sich in Sicherheit zu bringen.
Systemvoraussetungen
- PowerShell 3.0 oder höher: für 2008 R2 oder Windows 7 könnt ihr dieses hier herunterladen.
- mcrcon
- Steamcmd
Installation
Speichert diesen Text als update.cmd ab
[sourcecode toolbar=“true“ language=“plain“ title=“update.cmd“]
@echo off
ver | find "2003" > nul
if %ERRORLEVEL% == 0 goto ver_2003
if not exist "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" goto install
"%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" -command "exit $PSVersionTable.PSVersion.Major"
set PSVer=%ERRORLEVEL%
if %PSVer% LSS 3 goto ps1
powershell -ExecutionPolicy unrestricted -File "%~dp0mainscript.ps1"
exit
:ps1
echo Powershell 2 is not supported.
pause
exit
:ver_2003
echo Windows 2003 is not supported.
pause
exit
:install
echo PowerShell is not installed
pause
exit
[/sourcecode]
Speichert diesen Text als mainscript.ps1 ab
[sourcecode toolbar=“true“ language=“powershell“ title=“mainscript.ps1″]
$steamcmdFolder="C:\steamcmd"
$arksurvivalFolder="C:\arkserver"
$arksurvivalSteamScript="update_ark.txt"
$rconIP="127.0.0.1"
$rconPort=32330
$rconPassword="YOURPASSWORD"
$arkSurvivalStartArguments=$("TheIsland?QueryPort=27015?Port=7777?SetCheatPlayer=True?RCONEnabled=True?RCONPort="+$rconPort+"?listen")
$mcrconExec="C:\ARK-Scripts\mcrcon.exe"
$steamAppID="376030"
# Without clearing cache app_info_update may return old informations!
$clearCache=1
$scriptPath = Split-Path -parent $MyInvocation.MyCommand.Definition
$dataPath = $scriptPath+"\data"
$steamcmdExec = $steamcmdFolder+"\steamcmd.exe"
$steamcmdCache = $steamcmdFolder+"\appcache"
$latestAppInfo = $dataPath+"\latestappinfo.json"
$updateinprogress = $arksurvivalFolder+"\updateinprogress.dat"
$latestAvailableUpdate = $dataPath+"\latestavailableupdate.txt"
$latestInstalledUpdate = $dataPath+"\latestinstalledupdate.txt"
If (Test-Path $updateinprogress) {
Write-Host Update is already in progress
} Else {
Get-Date | Out-File $updateinprogress
Write-Host Creating data Directory
New-Item -Force -ItemType directory -Path $dataPath
If ($clearCache) {
Write-Host Removing Cache Folder
Remove-Item $steamcmdCache -Force -Recurse
}
Write-Host Checking for an update
& $steamcmdExec +login anonymous +app_info_update 1 +app_info_print $steamAppID +app_info_print $steamAppID +quit | Out-File $latestAppInfo
Get-Content $latestAppInfo -RAW | Select-String -pattern ‚(?m)"public"\s*\{\s*"buildid"\s*"\d{6,}"‘ -AllMatches | %{$_.matches[0].value} | Select-String -pattern ‚\d{6,}‘ -AllMatches | %{$_.matches} | %{$_.value} | Out-File $latestAvailableUpdate
If (Test-Path $latestInstalledUpdate) {
$installedVersion = Get-Content $latestInstalledUpdate
} Else {
$installedVersion = 0
}
$availableVersion = Get-Content $latestAvailableUpdate
if ($installedVersion -ne $availableVersion) {
Write-Host Update Available
Write-Host Installed build: $installedVersion – available build: $availableVersion
& $mcrconExec -c -H $rconIP -P $rconPort -p $rconPassword "broadcast New update available, server is restarting in 10 minutes!"
Start-Sleep -s 300
& $mcrconExec -c -H $rconIP -P $rconPort -p $rconPassword "broadcast New update available, server is restarting in 5 minutes!"
Start-Sleep -s 240
& $mcrconExec -c -H $rconIP -P $rconPort -p $rconPassword "broadcast New update available, server is restarting in 1 minute!"
Start-Sleep -s 60
& $mcrconExec -c -H $rconIP -P $rconPort -p $rconPassword "broadcast New update available, server is restarting!"
& $mcrconExec -c -H $rconIP -P $rconPort -p $rconPassword "saveworld"
Start-Sleep -s 10
#Does not work atm
# & $mcrconExec -c -H $rconIP -P $rconPort -p $rconPassword "quit"
$pidARK = (Wmic process where "Commandline like ‚%$rconPort%‘ and Name=’ShooterGameServer.exe’" get ProcessId | findstr /r "[1-9][0-9]")
& taskkill /PID $pidARK
Start-Sleep -s 20
& $steamcmdExec +runscript $arksurvivalSteamScript
& $arksurvivalFolder"\ShooterGame\Binaries\Win64\ShooterGameServer.exe" $arkSurvivalStartArguments -nosteamclient -game -lowmemory -nosound -sm4 -server -log
$availableVersion | Out-File $latestInstalledUpdate
Write-Host Update Done!
}
Remove-Item $updateinprogress -Force
}
[/sourcecode]
Ein Beispiel meines Steam Skripts (dieses sollte im steamCMD Verzeichnis liegen!):
[sourcecode toolbar=“true“ language=“plain“ title=“update_ark.txt“]
//ark
@ShutdownOnFailedCommand 1
@NoPromptForPassword 1
nSubscribedAutoDownloadMaxSimultaneous 32
@cMaxContentServersToRequest 16
@cMaxInitialDownloadSources 1
@fMinDataRateToAttemptTwoConnectionsMbps 0.01
@fDownloadRateImprovementToAddAnotherConnection 0.01
login anonymous
force_install_dir C:\arkserver\
app_update 376030
// validate
quit[/sourcecode]
Wie Benutze ich es?
Ein paar Kenntnisse in der Powershell sollten schon vorhanden sein, diese Grundlagen können wir euch leider nicht beibringen. Passt die Variablen im oberen Bereich der mainscript.ps1 an, so dass diese mit eure Windowsumgebung funktionieren. Um es regelmäßig auszuführen, könnt ihr die update.cmd einfach in die Aufgabenplanung hinzufügen.
Hi,
habe nun alles angepasst aber welche Datei soll ich ausführen, damit es klappt?
PowerShell war schon installiert, da es ein Windows Server 2012 ist.
mcrcon habe ich mir auch runtergeladen und habe es im C:\ARK-scriptfolder entpackt.
Gruß
Ulli
run.cmd ist zum ausführen da, diese führt wiederum das Powershell skript mit passenden Privilegien aus 🙂
Hi,
was muss denn in die run.cmd rein?
Ich sehe sie hier nirgends…
Gruß
Hatte noch was vergessen, in meinem Script zum updaten habe ich eine andere App-ID und zwar: 346110
Das Script kann gar nicht funktionieren, da der RCon Befehl Exit noch gar nicht enthalten ist.
Oh da sind wohl 2 Versionen durcheinander gekommen, das war eigentlich ein quit, Danke für den Hinweis
Hi, habt ihr die Linux Version schon fertig? Und muss man den Server immer noch im Sreen hochfahren? oder gibt es da inzwischen schon eine Alternative?
lg
Sam
http://www.ark-survival.net/en/2015/07/18/automatic-update-for-linux-servers/
Je nach umgebung musst du das eventuell ein wenig anpassen.
Ich erhalte eine Fehlermeldung.
Failed to load script file ‚update_ark-pve.txt‘
Und dann kann ich steamcmd nur noch mit quit beenden.
Gruß
Skript wurde komplett überarbeitet
Funktioniert schon ein wenig besser.
Alles geht, Einblendungen, Server beenden, aber dann wenn die update_ark.txt geladen wird, steht dann da:
Steam API Ok (oder so ähnlich) und dann bricht er ab mit:
Failed to load script file ‚update_ark.txt‘
Das Skript muss im steamcmd Ordner liegen, dann sollte es klappen 🙂
Funktioniert jetzt 1a, jetzt kann ich es mit in die Aufgabenplanung nehmen.
Danke dir für dieses 1+++++++ Script 🙂
Bekomme die run.cmd nicht zum laufen in der Aufgabenplanung (Windows Server 2012 R2)
Habe unter Programm/Skript:
C:\Windows\SysWOW64\cmd.exe
Bei Argumente hinzufügen:
/c „C:\Users\Administrator\Downloads\ARK Updaten\run.cmd“
Und unter Starten in:
C:\Users\Administrator\Downloads\ARK Updaten\
Unter Allgemein habe ich einen haken bei:
Unabhängig von der Benutzeranmeldung ausführen
Es passiert nichts, wenn ich auf „Ausführen“ klicke.
Wenn ich einen haken bei:
Nur ausführen, wenn der Benutzer angemeldet ist
reinmache und dann auf „Ausführen“ klicke, dann geht ganz kurz die cmd Konsole auf und schließt nach ca. 1 Sek. das Fenster wieder und nichts weiter passiert dann.
hi wer auch das prob hat das sich das cmd Fenster schließt überprüft mal eure start parameter ^^
es darf nix drinnen sein mit – game – server und so dann funzt das ganze auch
Hey,
Nachdem ich Powershell4 auf Win7Pro nachinstalliert habe, läuft das Skript zwar an, entfernt den Cache Folder, checkt brav nach einem Update, findet auch eins, meldet dann aber „installed build 0 – available build: 778915“ und „Server received, But no response!!“
Was mach ich noch falsch?
„installed build 0 – available build: 778915“ ist beim ersten mal in Ordnung, da er nach dem ersten update erst die installed buildnummer wegschreibt
„Server received, But no response“ kannst du ignorieren, da bei einigen rcon befehlen nichts zurückkommt flippt mcrcon aus. Ist nichts schlimmes.
Du solltest das einfach einmal durchlaufen lassen (damit es schneller geht kannst du ja die „Start-Sleep -s“ alle auf 0 setzen)
Hey,
Erstmal Danke für die schnelle Antwort 🙂 Ich hab das schon einige Male hintereinander laufen lassen, die Meldungen sind immer wie oben, aber ein Update wird halt nie gemacht :-/ Die Serverinstanz läuft auch unbeeindruckt weiter. Ich hab zum Spaß auch mal ein falsches Serverpasswort gesetzt, um zu checken, ob die überhaupt kommunizieren, dann kriege ich allerdings eine entsprechende Meldung. Hast du noch eine Idee, wo es klemmen könnte?
Hallo Chris , was hast Du denn in der Aufgabenplanung eingetragen, damit es funktioniert?
Ich habe meinen Server unter D:\ArkServer installiert aber das Script legt immer einen steamapps ordner mit der ShooterGameServer.exe drin ab und startet diese. Warum wird nicht die Exe im Ordner D:\ArkServer\Shootergame\Binaries\W64 sonder die D:\ArkServer\steamapps\temp\Shootergame\Binaries\W64\ShooterGameServer.exe?
Ist ein Powershell script machbar für Mod Updates? ich bekomme das einfach nicht hin weil die Mod Dateien ja gepackt von steamcmd runtergeladen werden. Ich weiss zwar schon das Ionic.Zlip dafür verwendet wird weiss aber die commands leider nicht.
LG und danke im voraus.
Hier mal mein script soweit nur fehlt halt leider das unzipen von den Mod Dateien
———————————————————————-
@echo off
SET STEAMLOGIN=anonymous anonymous
SET BRANCH=376030
SET MODBRANCH=346110
SET MODID1=504122600
SET ARKMODPATH=D:\Ark\Walhallapvp\ark\ShooterGame\Content\Mods
SET ARKSRVPATH=D:\Ark\Walhallapvp\ark
SET STEAMPATH=D:\Ark\Walhallapvp\steamcmd
SET IP=IP ADRESSE
SET QUERYPORT=27020
SET PLAYERS=50
SET RCON=true
SET RCONPORT=32330
SET PORT=8888
:: _________________________________________________________
@SCHTASKS /END /TN „ARK Server PVP“ >NUL 2>&1
taskkill /F /IM ShooterGameServerpvp.exe >NUL 2>&1
%STEAMPATH%\steamcmd.exe +login %STEAMLOGIN% +workshop_download_item %MODBRANCH% %MODID1% update +quit
%STEAMPATH%\steamcmd.exe +login %STEAMLOGIN% +workshop_download_item %MODBRANCH% %MODID1% validate +quit
xcopy D:\Ark\Walhallapvp\steamcmd\steamapps\workshop\content\346110\504122600\WindowsNoEditor\* D:\Ark\Walhallapvp\ark\ShooterGame\Content\Mods\504122600 /E /S /Y /C
start „“ /D „D:\Ark\Walhallapvp\arkremote“ „D:\Ark\Walhallapvp\arkremote\ARKRemotepvp.exe“
————————————————————————————————————
Kann es sein das was am Update geändert wurde.
Er kann das Update Build nicht mehr raus lesen.
Same problem here.
I dont know why but the Out-File command after calling the steamcmd with the app_info_print parameter is not producing the expected output like it does when executing the command normally. By normally I mean starting cmd, then starting steamcmd manually and entering the commands one at a time. To write them in this one line the output for +app_info_print stays just empty.
Heres the line thats not working any more:
$steamcmdExec +login anonymous +app_info_update 1 +app_info_print $steamAppID +app_info_print $steamAppID +quit | Out-File $latestApp
Anyone any ideas what the cause could be?
Ist bei mir auch so, muss wohl irgend was gefixt werden…
Hi, wird es denn von dieser Seite aus noch ein Update kommen?
Warum wird mein Kommentar denn nicht freigeschaltet, aber der Kommentar nach mir schon ?.
tut mir leid, hatte deinen Kommentar übersehen, derjenige der diesen Artikel geschrieben hat, ist leider nicht mehr aktiv 🙁 Würden uns freuen, falls jemand ein funktionierendes Skript findet, wenn dies in den Kommentaren hinterlassen wird
Ich habe mal rumgetestet und habe das +app_info_print 4 mal an steamcmd übergeben und es hat geklappt. Warum? Keine Ahnung 😀
Also sieht so aus bei mir:
& $steamcmdExec +login anonymous +app_info_update 1 +app_info_print $steamAppID +app_info_print $steamAppID +app_info_print 376030 +app_info_print 376030 +quit | Out-File $latestAppInfo
Vielen Dank für diese Information!
Cool, danke schön für die Hilfe, werde es gleich mal testen…
Es wird zwar eine ID reingeschrieben, aber updaten tut das Script nicht.
Bei mir klappts mit 4-mal +app_info_print $steamAppID hintereinander!
War schon seltsam das man das vorher 2x dort stehen hatte, aber mit erneut verdoppeltem Befehl gehts zum Glück jetzt wieder!
Danke für den Hinweis! Ich habs sogar mit 3-mal dem Befehl vorher versucht gehabt, leider erfolglos. Aber das mit 4!… darauf wäre ich nie gekommen.
Ja 3 mal funktioniert bei mir auch nicht.
Ich frage mich ob es für diese Funktion nicht eine bessere Lösung gibt die Ausgabe von app_info_print in eine Datei zu speichern.