Add Scripts/Powershell/Minecraft Server/Update Script.md
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				GitOps Automatic Deployment / GitOps Automatic Deployment (push) Successful in 32s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	GitOps Automatic Deployment / GitOps Automatic Deployment (push) Successful in 32s
				
			This commit is contained in:
		
							
								
								
									
										154
									
								
								Scripts/Powershell/Minecraft Server/Update Script.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								Scripts/Powershell/Minecraft Server/Update Script.md
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
| ``` | ||||
		Reference in New Issue
	
	Block a user