All checks were successful
GitOps Automatic Deployment / GitOps Automatic Deployment (push) Successful in 32s
154 lines
6.3 KiB
Markdown
154 lines
6.3 KiB
Markdown
**Purpose**: This script was purpose-built for the homelab Minecraft servers in my homelab. It may need to be ported based on your own needs.
|
|
|
|
```powershell
|
|
clear
|
|
|
|
# #################################################
|
|
# # BUNNY LAB - MINECRAFT UPGRADE SCRIPT #
|
|
# #################################################
|
|
|
|
# Function to display the banner
|
|
function Show-Banner {
|
|
Write-Host "#################################################" -ForegroundColor Cyan
|
|
Write-Host "# BUNNY LAB - MINECRAFT UPGRADE SCRIPT #" -ForegroundColor Cyan
|
|
Write-Host "#################################################" -ForegroundColor Cyan
|
|
}
|
|
|
|
# Function to get user input for the zip file
|
|
function Get-ZipFileName {
|
|
Write-Host "Step 1: Getting the zip file name from user input..." -ForegroundColor Yellow
|
|
Write-Host "Please enter the name of the newest Minecraft ZIP file in the downloads folder (e.g., 'Server-Files-x.xx.zip'): " -ForegroundColor Yellow
|
|
$zipFileName = Read-Host
|
|
$zipFilePath = "C:\Users\nicole.rappe\Downloads\$zipFileName"
|
|
|
|
# Check if the zip file exists in the Downloads folder
|
|
Write-Host "Verifying if the specified ZIP file exists at: $zipFilePath" -ForegroundColor Yellow
|
|
if (-not (Test-Path $zipFilePath)) {
|
|
Write-Host "File not found! Please check the file name and try again." -ForegroundColor Red
|
|
exit
|
|
}
|
|
|
|
Write-Host "ZIP file found: $zipFilePath" -ForegroundColor Green
|
|
return $zipFilePath
|
|
}
|
|
|
|
# Function to unzip the file without nesting
|
|
function Unzip-ServerFiles {
|
|
param (
|
|
[string]$zipFilePath,
|
|
[string]$destinationFolder
|
|
)
|
|
|
|
Write-Host "Step 2: Unzipping the server files to: $destinationFolder" -ForegroundColor Yellow
|
|
|
|
# Create a temporary folder for extraction
|
|
$tempFolder = "$env:TEMP\MinecraftTemp"
|
|
Write-Host "Creating temporary folder for extraction at: $tempFolder" -ForegroundColor Yellow
|
|
|
|
# Remove the temporary folder if it exists, then recreate it
|
|
if (Test-Path $tempFolder) {
|
|
Write-Host "Temporary folder exists. Removing existing folder..." -ForegroundColor Yellow
|
|
Remove-Item -Recurse -Force $tempFolder
|
|
}
|
|
New-Item -ItemType Directory -Path $tempFolder
|
|
|
|
Write-Host "Unzipping new server files..." -ForegroundColor Green
|
|
Expand-Archive -Path $zipFilePath -DestinationPath $tempFolder -Force
|
|
|
|
Write-Host "Moving unzipped files to destination folder: $destinationFolder" -ForegroundColor Green
|
|
# Move the contents of the temporary folder to the destination
|
|
Get-ChildItem -Path $tempFolder -Recurse | Move-Item -Destination $destinationFolder -Force
|
|
|
|
# Clean up the temporary folder
|
|
Write-Host "Cleaning up temporary folder..." -ForegroundColor Yellow
|
|
Remove-Item -Recurse -Force $tempFolder
|
|
}
|
|
|
|
# Function to copy specific files/folders from the old deployment
|
|
function Copy-ServerData {
|
|
param (
|
|
[string]$sourceFolder,
|
|
[string]$destinationFolder
|
|
)
|
|
|
|
Write-Host "Step 3: Copying server data from: $sourceFolder to: $destinationFolder" -ForegroundColor Yellow
|
|
|
|
# Files to copy
|
|
Write-Host "Copying essential files..." -ForegroundColor Yellow
|
|
Copy-Item "$sourceFolder\eula.txt" "$destinationFolder\eula.txt" -Force
|
|
Copy-Item "$sourceFolder\user_jvm_args.txt" "$destinationFolder\user_jvm_args.txt" -Force
|
|
Copy-Item "$sourceFolder\ops.json" "$destinationFolder\ops.json" -Force
|
|
Copy-Item "$sourceFolder\server.properties" "$destinationFolder\server.properties" -Force
|
|
# Copy-Item "$sourceFolder\mods\ftbbackups2-neoforge-1.21-1.0.28.jar" "$destinationFolder\mods\ftbbackups2-neoforge-1.21-1.0.28.jar" -Force
|
|
Copy-Item "$sourceFolder\config\ftbbackups2.json" "$destinationFolder\config\ftbbackups2.json" -Force
|
|
|
|
Write-Host "Copying world data and backups folder..." -ForegroundColor Yellow
|
|
# Folder to copy (recursively)
|
|
Copy-Item "$sourceFolder\world" "$destinationFolder\world" -Recurse -Force
|
|
# New-Item -ItemType SymbolicLink -Path "\backups" -Target "Z:\"
|
|
}
|
|
|
|
# Function to rename the old folder with the current date
|
|
function Rename-OldServer {
|
|
param (
|
|
[string]$oldFolderPath
|
|
)
|
|
|
|
$currentDate = Get-Date -Format "MM-dd-yyyy"
|
|
$backupFolderPath = "$oldFolderPath.backup.$currentDate"
|
|
|
|
Write-Host "Step 4: Renaming old server folder to: $backupFolderPath" -ForegroundColor Yellow
|
|
Rename-Item -Path $oldFolderPath -NewName $backupFolderPath
|
|
Write-Host "Old server folder renamed to: $backupFolderPath" -ForegroundColor Green
|
|
}
|
|
|
|
# Function to rename the new deployment to 'ATM10'
|
|
function Rename-NewServer {
|
|
param (
|
|
[string]$newDeploymentPath,
|
|
[string]$finalServerPath
|
|
)
|
|
|
|
Write-Host "Step 5: Renaming new deployment folder to 'ATM10' at: $finalServerPath" -ForegroundColor Yellow
|
|
Rename-Item -Path $newDeploymentPath -NewName $finalServerPath
|
|
Write-Host "New server folder renamed to 'ATM10' at: $finalServerPath" -ForegroundColor Green
|
|
}
|
|
|
|
# Main Script Logic
|
|
|
|
# Show banner
|
|
Show-Banner
|
|
|
|
# Variables for folder paths
|
|
$oldServerFolder = "C:\Users\nicole.rappe\Desktop\Minecraft_Server\ATM10"
|
|
$newDeploymentFolder = "C:\Users\nicole.rappe\Desktop\Minecraft_Server\ATM10_NewDeployment"
|
|
$finalServerFolder = "C:\Users\nicole.rappe\Desktop\Minecraft_Server\ATM10"
|
|
|
|
# Step 1: Get the zip file name from the user
|
|
$zipFilePath = Get-ZipFileName
|
|
|
|
# Step 2: Unzip the file to the new deployment folder without nesting
|
|
Unzip-ServerFiles -zipFilePath $zipFilePath -destinationFolder $newDeploymentFolder
|
|
|
|
# Step 3: Copy necessary files/folders from the old server
|
|
Copy-ServerData -sourceFolder $oldServerFolder -destinationFolder $newDeploymentFolder
|
|
|
|
# Step 4: Rename the old server folder with the current date
|
|
Rename-OldServer -oldFolderPath $oldServerFolder
|
|
|
|
# Step 5: Rename the new deployment folder to 'ATM10'
|
|
Rename-NewServer -newDeploymentPath $newDeploymentFolder -finalServerPath $finalServerFolder
|
|
|
|
# Step 6. Create Symbolic Link to Backup Drive
|
|
Write-Host "Step 6: Create Symbolic Link to Backup Drive" -ForegroundColor Cyan
|
|
cd "C:\Users\nicole.rappe\Desktop\Minecraft_Server\ATM10"
|
|
cmd.exe /c mklink /D backups Z:\
|
|
|
|
# Step 7: Notify the user that the server is ready to launch
|
|
Write-Host "Step 7: Server Ready to Launch!" -ForegroundColor Cyan
|
|
|
|
Write-Host "Press any key to exit the script"
|
|
[System.Console]::ReadKey($true) # Waits for a key press and doesn't display the pressed key
|
|
|
|
clear
|
|
``` |