Automatisches Update – Überarbeitet am 15.08.2015

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.

 

About the author

33 thoughts on “Automatisches Update – Überarbeitet am 15.08.2015”

  1. 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

  2. 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‘

  3. 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.

  4. 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?

    1. „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)

      1. 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?

  5. 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?

  6. 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“

    ————————————————————————————————————

  7. 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?

      1. 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

  8. 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

  9. 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.

Schreibe einen Kommentar

  • English
  • Русский
  • Svenska
  • 中文 (中国)
  • Español
  • Português
  • Français

Advertisement

Ark Multiplayer Server

ARK-Survival.net Server

s.ark-survival.net


]GER-PvE[ ark-survival.net - Brauhaus der Hoffnung
]Scorched Earth[ ark-survival.net - Brauhaus der Hoffnung
]GER-PvP[ ark-survival.net - Brauhaus der Hoffnung

German Only!

Kategorien