You never know, your VMware vSphere ESXi host may break, hardware may fail or something else forces you to restore your configuration to a new server. Whatever the reason is, it’s always good to have a backup laying around to be able to restore quickly from a disaster. This backup script takes a backup of the VMware Host configuration (not the VMs itself) and is very useful if you want to restore a Host to a new server.

This script is run on a computer with Windows 10 installed on the local network (don’t forget to allow the computer to access the server in the firewall), but could also be run on a remote computer, not tested that yet though.

To be able to run this script you need to install PowerCLI. We run version 6.5 at the moment. You can download that version directly from our server. You also need to move the `Initialize-PowerCLIEnvironment.ps1` to the backup folder, as for some strange reason Powershell can’t read paths with spaces. You can find that script in `C:\Program Files (x86)\VMware\Infrastructure\PowerCLI\Scripts` after you installed PowerCLI.

Then just open Powershell as administrator and run:

PS C:\WINDOWS\system32> Set-ExecutionPolicy RemoteSigned
PS C:\WINDOWS\system32> notepad.exe C:\Users\[user]\Nextcloud\ESXi_Backup\ESXi_Backup.ps1

and add this script:

# Variables
$Server = "[IP or Hostname]"
$Folder = “C:\Users\[user]\Nextcloud\ESXi_Backup”
$FolderOld = “$Folder\Old”
$Date = Get-Date -f "dd-MM-yyyy"
$DateOld = "{0:dd-MM-yyyy}" -f (get-date).AddDays(-30)
$Pass = "SecretPassword"

# Load PowerCLI
Invoke-Expression $Folder\Initialize-PowerCLIEnvironment.ps1
Start-Sleep 3
Add-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue

# Connect to local ESXi Server
Connect-VIServer $Server -Username root -Password $Pass -Verbose


# Move existing backup files to the old directory
Get-ChildItem -Path "$Folder\*.tgz" -Recurse | Move-Item -Force -Destination "$FolderOld\"

# Backup ESXi configuration
Get-VMHost | get-vmhostfirmware -BackupConfiguration -DestinationPath $Folder
Rename-Item -Force $Folder\configBundle-$Server.tgz -newName $Folder\$Date--$Server.tgz

# Delete old backup
If (Test-Path $FolderOld\$DateOld--$Server.tgz){
    Remove-Item $FolderOld\$DateOld--$Server.tgz
}

# Disconnect session vCenter 
Disconnect-VIserver -Server $Server -Confirm:$false

We make the backup to our local Nextcloud folder, but you can choose whatever folder or path that suits you of course.

schedule the task in windows

To run this as a scheduled task in Windows, you have to open the Task Scheduler and add a new job that is run with the highest privileges and add a new task like this. Then add this line to be run:

powershell -WindowStyle Hidden -file "C:\Users\[user]\Nextcloud\ESXi_Backup\ESXi_Backup.ps1"

And you’re all set!