VMware Cloud Community
parkaust
Contributor
Contributor

PowerCLI and cloning

Hi all-

I know this has been covered previously via other posts, such as:

https://communities.vmware.com/t5/VMware-PowerCLI-Discussions/Clone-multiple-VMs-and-append-names/td...

and

https://communities.vmware.com/t5/VMware-PowerCLI-Discussions/Clone-a-VM-with-a-script/td-p/509187 

But it seems like those situations vary just enough that it throws me off of what I'm trying to accomplish.  I'm trying to automate the following procedure that I currently do for clones.  It's time consuming, to say the least.  I currently do these steps in vSphere:

  • R-click and choose Clone/Clone to virtual machine 
  • Name clone (we append the server name with "_clone_mmddyyyy"
  • Choose destination folder (i.e. "Clones")
  • Chose host cluster 
  • Choose datastore
  • Finish

So I have VMs that I want to clone, appending their names, sourced from different datastores and folders, all being cloned to the same folder and datastore.

Any help getting this straight in my brain would be helpful.  

Austin

0 Kudos
3 Replies
LucD
Leadership
Leadership

I don't see anything unusual in your scenario.

The first thing to define, how would the variable data (VM, folder, cluster and datastore) be transmitted to a script?
Is that information available in a file (for example a CSV)?
Or do you want the script to prompt for that information?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
parkaust
Contributor
Contributor

LucD-

Thanks so much for the reply.  I could put the info into a CSV fairly easily.  The less I have to do once the script is running, the better.  I'm looking to do less manual input with cloning so the CSV route is ideal 🙂

0 Kudos
LucD
Leadership
Leadership

Try something like this.

I used splatting to avoid a long line of parameters on the New-VM cmdlet.

# CSV layout
#
#VM,Cluster,Datastore,Folder
#VM1,MyCluster,MyDS1,Clones
#VM2,MyCluster,MyDS2,Clones

Import-Csv -Path .\clone.csv -UseCulture |
ForEach-Object -Process {
  $sClone = @{
    VM = $_.VM
    ResourcePool = $_.Cluster
    Datastore = $_.Datastore
    Name = "$($_.VM)_clone_$(Get-Date -Format 'MMddyyyy')"
    Location = $_.Folder
    Confirm = $false
  }
  New-VM @sClone
}

 


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos