Quick post, had a customer that yearly wants a clone of their VMs, copied to a NAS, and then shipped to customers HQ. The owner of the company put this as a requirement. Fair enough. I have almost always done the clone of the VMs by GUI, in the start, this was easy because they only had 5 servers, but they now have more. So this time I wanted to try and script it instead. It took me some extra time, but in the end, I think it’s worth it. My PowerShell skills are not great, still learning so bear with me.
# Variables $vcenter = "<IP or hostname>" $cluster = "<name of cluster that contains the servers>" $nfsIP = "1.2.3.4" $nfsMount = "/nfs" # Getting VMware PowerShell Modules Get-Module -Name vmware* -ListAvailable | Import-Module # Connect to vcenter Connect-VIServer -Server $vcenter -User <username> # Mount NAS get-cluster $cluster | get-vmhost | new-datastore -nfs -name NAS -path $nfsMount -nfshost $nfsIP # More Variables $ds = get-datastore NAS $tempHost = "esx74.domain.tld" $vms = Get-VM -Name customer* # Copy all foreach ($vm in $vms) { new-vm -name "$($vm.name)-clone" -VM $vm -Datastore $ds -vmhost $tempHost Remove-VM -VM "$($vm.name)-clone" -DeleteFromDisk:$false -Confirm:$false -RunAsync } # Remove datastore from hosts again Get-Cluster $cluster | Get-VMHost | Remove-Datastore -Datastore $ds