diff --git a/Scripts/Powershell/Minecraft Server/Update Script.md b/Scripts/Powershell/Minecraft Server/Update Script.md new file mode 100644 index 0000000..d7c0668 --- /dev/null +++ b/Scripts/Powershell/Minecraft Server/Update Script.md @@ -0,0 +1,154 @@ +**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 +``` \ No newline at end of file