PowerCLI Powerhsell
Installation
Allow powershell to run powercli cmdlets
Set-ExecutionPolicy RemoteSigned Install-Module -Name VMware.PowerCLI
Log into the server and start using commands
$cred=get-credential connect-viserver -server localhost -credential $cred get-vm
Clone VM
new-vm -name <new_machine_name> -vm <source_machine_name> -vmhost <ip or host name of the physical host, not the controller>
Delete VM
remote-vm -vm <namme_of_vm> -deletepermanently -confirm $false
Sample Script
format is <scriptname>.ps1 <number of VMs to make>
ie clone_vm.ps1 3
param([string]$num1) #Athenticate $cred=get-credential connect-viserver -server localhost -credential $cred #Check for enough space $neededspace=([int]$num1 * '<space needed for each VM>') $space12=(datastore -Name <datastore name> | Select-Object FreeSpaceGB | ForEach-Object { $_.FreeSpaceGB }) if ( $space12 -lt $neededspace ){ echo "Not enought space, $space12 is available and you need $neededspace" exit } #The following assumes you are creating VMs with an incrementing name based on a [a-z]+-[a-z]+-[0-9]+ format. #Get last VM created for incremental creation get-folder -name <folder name> | get-vm | select name > C:\powercli\outtest $vms=(Get-Content C:\powercli\outtest | %{"$($_.Split('-')[2])"}) $base=0 foreach($line in $vms){ if ([int]$line -gt [int]$base){ $base=$line } } $base = [int]$base + 1 $num453=0 Do{ $usehost=(Get-VMHost | Get-Random) new-vm -name vm-name-$base -vm clonefromthis -VMHost $usehost -RunAsync -WhatIf $num453=[int]$num453 + [int]1 }until ([int]$num453 -eq [int]$num1)