現在、iPhoneやiPadでMinecraft(以下マイクラ)を楽しんでいますが、アプリを自動アップデートしていると、自宅に建てているWindows用の統合版(PE)マイクラサーバー(Bedrock Server)側とのバージョンの違いで、接続できないことが多々あります。
お待たせしました!(誰も待ってないw)自宅で稼働しているマイクラ(統合版)のサーバーを公開します!マイクラBEサーバー環境はBedrock 1.14.xになります。(2020年2月現在)バージョンアップに伴い、予告なくメンテナンスすることがありますので、予めご了承ください。また、自宅サーバーが貧弱なため、同時利用人数は最大10人までとさせていただきます。接続情報はこちらからどうぞ!注意事項サーバーの稼働状況について基本的には24時間365日稼働しています。しかし、メンテナンスもそうですが、たまに家のブレーカーが落ちること... 【ミノクラ】マイクラ(統合版)のサーバを公開しました! - Minory |
その際、主に利用者からクレームを受けて、サーバー側のバージョンを手動アップデートしているのですが、すぐに対応できる状況じゃないと利用者を待たせることになるので一苦労(汗)。
そこで、WindowsのPowerShellとタスクスケジューラーを使った、統合版(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… Minecraft PE / Bedrock Windows Automatic update script (Windows PowerShell) - Destructive Violence Gaming |
PowerShellで最新版にアップデート
今回のスクリプトを使ったアップデート時にやることは、
- ダウンロードリンクの取得と最新バージョンの確認
- 起動中のBedrock Serverの停止
- 設定ファイルのバックアップ
- 最新版Bedrock Serverのダウンロード
- ダウンロードしたBedrock Serverの展開
- バックアップした設定ファイルを戻す
- Bedrock Serverの起動
ザックリこのような流れです。
まずは完成したPowerShellのスクリプトを貼り付けます。
後ほど簡単に内容の解説と参考サイトとの違いだけご紹介したいと思います。
$gameDir = "C:\bedrock"
cd $gameDir
[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"
(Invoke-WebRequest -Uri -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 minoryorg/minecraft-bedrock-server-automatic-update-for-windows - GitHub |
解説と参考サイトとの違い
0. インストール先の指定
最初から解説していきます。
まず、このPowerShellを使用する際に唯一変更する箇所は、1行目の$gameDir
のパラメータのみです。
ここにBedrock Serverのインストールフォルダを指定します。
1. ダウンロードリンクの取得と最新バージョンの確認
ここが参考サイトと異なる部分になります。
参考サイトでは以下のように、Invoke-WebRequest
でマイクラ公式のBedrock Serverダウンロードページの情報からLinks
でダウンロードリンクを取得していますが、デバッグしながらやってみると、Links
の項目はなぜか空になってました。
# 改良前
$result = Invoke-WebRequest -Uri
$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 -match "<a href=""(.*.zip).*?"">"
$url = $Matches[1]
あとは参考サイトと同じようにReplaceして、最新版Bedrock ServerのZIPファイル名が取得できました!
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 ServerのZIPファイルをダウンロード。
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ファイルを指定するのでは上手くいきませんでした。
話を進める前に、タスクスケジューラーの基本はこちらで確認しておいてくださいね。
パソコンで行う一連の作業を自動化し、作業時間の節約および人間に多いとされる作業ミスや操作ミスを防ぎ、面倒な繰り返し作業を解消できる大変便利な機能である。このページでは、Windows のタスクスケジューラの設定内容を、初めての方も理解できるよう詳細に記すことにする。 タスクスケジューラ設定内容の詳細・JM1XTK - jm1xtk.dip.jp |
PowerShellを1時間毎に実行する
今回はトリガーを細かく設定しますので、まずはタスクスケジューラーを開き、「基本タスクの作成」ではなく「タスクの作成」を選択してください。
左端の「全般」タグから順を追って説明します。
全般
ここはそれぞれ実行する端末の環境によって異なるので、自分で最適だと思う「セキュリティ オプション」を設定してください。
ここの設定も間違えるとタスクは動きません。
よくネットの情報では、「ユーザーがログオンしているかどうかにかかわらず実行する」や「最上位の特権で実行する」にもチェックを入れることが多く推奨されているようですが、著者の環境では、「ユーザーがログオンしているときのみ実行する」でないと動きませんでした。
これは、著者の環境がネットワークドライブにBedrock Serverのインストールフォルダがあるからではないかと思います。
もし、タスクを実行してみて動かなければ、ここの設定を変えてみることも視野に入れておいてください。
トリガー
トリガーでは、いつ、どのような間隔でPowerShellを実行するかを決めます。
今回の例では1時間毎に実行したいのですが、「設定」の項目には1回、毎日、毎週、毎月しかありません。
そこで、「設定」の項目では「1回」を選択し、「詳細設定」の方で1時間毎になるようにします。
「詳細設定」の「繰り返し間隔」を「1時間」で設定し、右隣の「継続時間」を「無制限」にします。
これで、1時間毎に永遠に実行するタスクが実現できます。
操作
出典:WindowsのタスクスケジューラーでPowerShellのスクリプトを実行する際には「パス」に注意:Tech TIPS – @IT
さて、ここが1番の悩みでした。
普通なら「プログラム/スクリプト」に今回のPowerShellで作った.ps1のスクリプトファイルを設定するだけで良さそうなのですが、PowerShellの場合は一味違います。
以下のように設定してください。
プログラム/スクリプト |
※PowerShell本体のフルパス |
---|---|
引数の追加 |
※PowerShell本体の引数として、.ps1を実行 |
開始 |
※.ps1を配置しているフォルダパス |
この設定の意味は、.ps1のスクリプトファイルを直接実行するのではなく、PowerShell本体から.ps1を実行しています。
このように設定しないと動きません!
その他のタブ
その他にも「条件」や「設定」タブがありますが、ここでは説明を割愛します。
それぞれの環境に合わせてご自身で設定してください。
タスクスケジューラーの設定は以上です。
できたら試しに「実行」をクリックして動作が正常かどうか確認してください。
お疲れ様でした!
- Original:https://minory.org/bedrock-server-auto-update.html
- Source:Minory
- Author:管理者
Amazonベストセラー
Now loading...