-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMinecraftBedrockAutoUpdater.ps1
115 lines (94 loc) · 3.33 KB
/
MinecraftBedrockAutoUpdater.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
param(
$BackupServerFolderPath = "C:\Minecraft\VersionBackup\",
$LiveServerFolderLocation = "C:\Minecraft\Server",
$FilesToExclude = @(
"permissions.json",
"server.properties",
"whitelist.json"
),
$ExeName = "Bedrock_Server.exe"
)
function Get-NewMinecraftServerVersionUrl {
param(
$DownloadUrl = "https://www.minecraft.net/en-us/download/server/bedrock/"
)
return ((Invoke-WebRequest $DownloadUrl).links | Where-Object -FilterScript { $_."data-platform" -eq 'serverBedrockWindows' }).href
}
function Get-MinecraftVersionChangeValidation {
param(
$NewMinecraftServerVersionUrl
)
$currentVersions = (Get-ChildItem $BackupServerFolderPath).Name
$newVersionNumber = $NewMinecraftServerVersionUrl.Split("/")[-1] -replace (".zip", "")
return $currentVersions -contains $newVersionNumber
}
function Get-MinecraftZipFromUrl {
param(
$DownloadUrl,
$ZipFolderName = $DownloadUrl.Split("/")[-1]
)
Invoke-WebRequest -Uri $DownloadUrl -OutFile ($BackupServerFolderPath + $ZipFolderName)
return $ZipFolderName
}
function Set-MinecraftFilesForDeployment {
param(
$ZippedFolderName
)
Expand-Archive -Path ($BackupServerFolderPath + $ZippedFolderName) -DestinationPath ($BackupServerFolderPath + ($ZippedFolderName -replace (".zip", ""))) -Force
Remove-Item ($BackupServerFolderPath + $ZippedFolderName) -Force
return $ZippedFolderName -replace (".zip", "")
}
function Get-ServerExection {
Param(
[CmdletBinding(DefaultParametersetName = 'Start')]
[Parameter(ParameterSetName = 'Start', Mandatory = $true)]
[switch]
$Start,
[Parameter(ParameterSetName = 'Stop', Mandatory = $true)]
[switch]
$Stop
)
if ($Start) {
Start-Process ("$LiveServerFolderLocation" + "\" + "$ExeName") -WindowStyle Hidden
}
if ($Stop) {
Stop-Process -Name ($ExeName -replace (".exe", ""))
}
Start-Sleep -Seconds 3
if (Get-Process ($ExeName -replace (".exe", "")) -ErrorAction Ignore) {
Write-Verbose "$($ExeName -replace ('.exe', '')) Service Is Running" -Verbose
}
else {
Write-Verbose "$($ExeName -replace ('.exe', '')) Service Is Stoppped" -Verbose
}
}
function Copy-ServerPackages {
param(
$StagedFolderName
)
$FilesToCopy = New-Object System.Collections.ArrayList
foreach ($item in $(Get-ChildItem ($BackupServerFolderPath + $StagedFolderName))) {
if ($FilesToExclude -notcontains $item.Name) {
$FilesToCopy.Add($item) | Out-Null
}
}
foreach ($item in $FilesToCopy) {
Copy-Item $item.FullName -Destination $LiveServerFolderLocation -Recurse -Force -Verbose
}
}
function Main {
$serverVersionUrl = Get-NewMinecraftServerVersionUrl
if (Get-MinecraftVersionChangeValidation $serverVersionUrl) {
Write-Verbose "Current Version Is Up To Date" -Verbose
Write-Verbose "Exiting" -Verbose
return
}
else {
$zipFolderName = Get-MinecraftZipFromUrl -DownloadUrl $serverVersionUrl
$stagingFolder = Set-MinecraftFilesForDeployment -ZippedFolderName $zipFolderName
Get-ServerExection -Stop
Copy-ServerPackages -StagedFolderName $stagingFolder
Get-ServerExection -Start
}
}
Main