統合版マイクラ(PE)サーバーを自動アップデート!for Windows

bedrock-server-auto-update
LINEで送る
Pocket

現在、iPhoneiPadMinecraft(以下マイクラ)を楽しんでいますが、アプリ自動アップデートしていると、自宅に建てているWindows用の統合版PEマイクラサーバーBedrock Server)側とのバージョンの違いで、接続できないことが多々あります。

お待たせしました!(誰も待ってないw)自宅で稼働しているマイクラ(統合版)のサーバーを公開します!マイクラBEサーバー環境はBedrock 1.14.xになります。(2020年2月現在)バージョンアップに伴い、予告なくメンテナンスすることがありますので、予めご了承ください。また、自宅サーバーが貧弱なため、同時利用人数は最大10人までとさせていただきます。接続情報はこちらからどうぞ!注意事項サーバーの稼働状況について基本的には24時間365日稼働しています。しかし、メンテナンスもそうですが、たまに家のブレーカーが落ちること...

その際、主に利用者からクレームを受けて、サーバー側のバージョン手動アップデートしているのですが、すぐに対応できる状況じゃないと利用者を待たせることになるので一苦労(汗)。
そこで、WindowsPowerShellタスクスケジューラーを使った、統合版(PE)マイクラサーバー自動アップデートスクリプトを作成したので公開します!


統合版マイクラの自動アップデート

統合版(PE)マイクラサーバー(Bedrock Server)には、Windows版とUbuntu(Linux)版が用意されています。
Ubuntu版には便利なシェルスクリプトが公開されているので、特に気にせず自動アップデートできるのですが、Windows版は探しまくってもすぐ使えるようなものは全く見つかりませんでした。。
海外のサイトで唯一使えそうな情報があったので、そちらを参考に少し改造して完成させました!

Create a new PowerShell file .ps1 $gameDir = “C:\MCServer” cd $gameDir ::SecurityProtocol = “tls12, tls11, tls” $result = Invoke-WebRequest -Ur…

PowerShellで最新版にアップデート

今回のスクリプトを使ったアップデート時にやることは、

  1. ダウンロードリンクの取得と最新バージョンの確認
  2. 起動中のBedrock Serverの停止
  3. 設定ファイルのバックアップ
  4. 最新版Bedrock Serverのダウンロード
  5. ダウンロードしたBedrock Serverの展開
  6. バックアップした設定ファイルを戻す
  7. Bedrock Serverの起動

ザックリこのような流れです。
まずは完成したPowerShellスクリプトを貼り付けます。
後ほど簡単に内容の解説と参考サイトとの違いだけご紹介したいと思います。

$gameDir = "C:\bedrock"

cd $gameDir

[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"

(Invoke-WebRequest -Uri https://minecraft.net/en-us/download/server/bedrock/).Content -match "<a href=""(.*.zip).*?"">"
$url = $Matches[1]
$filename = $url.Replace("https://minecraft.azureedge.net/bin-win/","")
$filename

$url = "$url"
$output = "$gameDir$filename"
$output

if(!(get-item $output)){
    Stop-Process -name "bedrock_server"

    # DO AN BACKUP OF CONFIG
    New-Item -ItemType Directory -Name backup
    Copy-Item -Path "server.properties" -Destination backup
    Copy-Item -Path "whitelist.json" -Destination backup
    Copy-Item -Path "permissions.json" -Destination backup

    $start_time = Get-Date

    Invoke-WebRequest -Uri $url -OutFile $output
    Write-Output "Time taken: $((Get-Date).Subtract($start_time).Seconds) second(s)"
    Expand-Archive -LiteralPath $output -DestinationPath $gameDir -Force

    # RECOVER BACKUP OF CONFIG
    Copy-Item -Path ".\backup\server.properties" -Destination .\
    Copy-Item -Path ".\backup\whitelist.json" -Destination .\
    Copy-Item -Path ".\backup\permissions.json" -Destination .\

}

if(!(get-process -name bedrock_server)){
    Start-Process "bedrock_server.exe"
}

exit

ちなみに、このスクリプトGithubでも公開していますので、ダウンロードして自由にお使いください。
使い方についてもこちらをご参照ください。

Minecraft Bedrock Server Automatic Update for Windows(統合版マイクラサーバー自動アップデートスクリプト) - minoryorg/minecraft-bedrock-server-automatic-update-for-windows

解説と参考サイトとの違い

0. インストール先の指定

最初から解説していきます。
まず、このPowerShellを使用する際に唯一変更する箇所は、1行目の$gameDirのパラメータのみです。
ここにBedrock Serverインストールフォルダを指定します。

1. ダウンロードリンクの取得と最新バージョンの確認

ここが参考サイトと異なる部分になります。
参考サイトでは以下のように、Invoke-WebRequestマイクラ公式のBedrock Serverダウンロードページの情報からLinksダウンロードリンクを取得していますが、デバッグしながらやってみると、Linksの項目はなぜか空になってました。

# 改良前
$result = Invoke-WebRequest -Uri https://minecraft.net/en-us/download/server/bedrock/
$serverurl = $result.Links | select href | where {$_.href -like "https://minecraft.azureedge.net/bin-win/bedrock-server*"}
$url = $serverurl.href

そこで、Contentの情報からダウンロードリンクを取得するよう改造しました!
さらに、ダウンロードリンクの検索には-matchを使って、HTMLアンカータグにあるhrefの値の末尾に.zipが付くのもを抽出しています。

# 改良後
(Invoke-WebRequest -Uri https://minecraft.net/en-us/download/server/bedrock/).Content -match "<a href=""(.*.zip).*?"">"
$url = $Matches[1]

あとは参考サイトと同じようにReplaceして、最新版Bedrock ServerZIPファイル名が取得できました!

2. 起動中のBedrock Serverの停止

この行で、インストールフォルダに先程取得したZIPファイルが存在するか確認します。

if(!(get-item $output)){

存在したら何もしない、存在しなかったらバージョンアップを実行します。

Stop-Process -name "bedrock_server"

Bedrock Server停止

3. 設定ファイルのバックアップ

New-Item -ItemType Directory -Name backup

で設定ファイルのバックアップ先フォルダ(backup)を作成し、

Copy-Item -Path "server.properties" -Destination backup
・・・

で展開した際に上書きされないよう設定ファイルをbackupフォルダへ退避。

4. 最新版Bedrock Serverのダウンロード

Invoke-WebRequest -Uri $url -OutFile $output

1.で取得した最新版ダウンロードリンクから、Bedrock ServerZIPファイルをダウンロード

5. ダウンロードしたBedrock Serverの展開

Expand-Archive -LiteralPath $output -DestinationPath $gameDir -Force

Bedrock ServerインストールフォルダZIPファイルを解凍展開

6. バックアップした設定ファイルを戻す

Copy-Item -Path ".\backup\server.properties" -Destination .\
・・・

3.でbackupフォルダにバックアップしておいた設定ファイルを元に戻して

7. Bedrock Serverの起動

Start-Process "bedrock_server.exe"

Bedrock Server起動すれば完了!
最後はプロセスが残らないようexitで終了、という流れです。

タスクスケジューラーでPowerShellの実行

完成したPowerShellを定期的に実行するよう、タスクスケジューラーに登録します。
実はこれが少し厄介で、タスクスケジューラーPowerShellスクリプトを実行させる場合、単純に.ps1ファイルを指定するのでは上手くいきませんでした。
話を進める前に、タスクスケジューラーの基本はこちらで確認しておいてくださいね。

PowerShellを1時間毎に実行する

今回はトリガーを細かく設定しますので、まずはタスクスケジューラーを開き、「基本タスクの作成」ではなく「タスクの作成」を選択してください。
左端の「全般」タグから順を追って説明します。

全般

タスクスケジューラ設定内容の詳細

ここはそれぞれ実行する端末の環境によって異なるので、自分で最適だと思う「セキュリティ オプション」を設定してください。
ここの設定も間違えるとタスクは動きません。
よくネットの情報では、「ユーザーがログオンしているかどうかにかかわらず実行する」や「最上位の特権で実行する」にもチェックを入れることが多く推奨されているようですが、著者の環境では、「ユーザーがログオンしているときのみ実行する」でないと動きませんでした。
これは、著者の環境がネットワークドライブBedrock Serverインストールフォルダがあるからではないかと思います。
もし、タスクを実行してみて動かなければ、ここの設定を変えてみることも視野に入れておいてください。

トリガー

Windows10でタスクを1時間間隔で実行する方法
出典:Windows10でタスクを1時間間隔で実行する方法

トリガーでは、いつ、どのような間隔でPowerShellを実行するかを決めます。
今回の例では1時間毎に実行したいのですが、「設定」の項目には1回毎日毎週毎月しかありません。
そこで、「設定」の項目では「1回」を選択し、「詳細設定」の方で1時間毎になるようにします。
詳細設定」の「繰り返し間隔」を「1時間」で設定し、右隣の「継続時間」を「無制限」にします。
これで、1時間毎に永遠に実行するタスクが実現できます。

操作

WindowsのタスクスケジューラーでPowerShellのスクリプトを実行する際には「パス」に注意
出典:WindowsのタスクスケジューラーでPowerShellのスクリプトを実行する際には「パス」に注意:Tech TIPS – @IT

さて、ここが1番の悩みでした。
普通なら「プログラム/スクリプト」に今回のPowerShellで作った.ps1スクリプトファイルを設定するだけで良さそうなのですが、PowerShellの場合は一味違います。
以下のように設定してください。

プログラム/スクリプト
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

※PowerShell本体のフルパス

引数の追加
-Command ".\bedrock_server.ps1"

※PowerShell本体の引数として、.ps1を実行
※絶対パス(C:\bedrock\bedrock_server.ps1)でもOK

開始
C:\bedrock

※.ps1を配置しているフォルダパス

この設定の意味は、.ps1スクリプトファイルを直接実行するのではなく、PowerShell本体から.ps1を実行しています。
このように設定しないと動きません!

その他のタブ

その他にも「条件」や「設定」タブがありますが、ここでは説明を割愛します。
それぞれの環境に合わせてご自身で設定してください。
タスクスケジューラーの設定は以上です。
できたら試しに「実行」をクリックして動作が正常かどうか確認してください。
お疲れ様でした!

この記事が気に入ったら
いいね ! しよう

Twitter で
LINEで送る
Pocket


コメントを残す

Amazon プライム対象