Virtualization, Cloud, Infrastructure and all that stuff in-between
My ramblings on the stuff that holds it all together
Quick and Dirty PowerShell to create a large number of test VMs with sequential names
Be gentle, I’m new to this PowerShell stuff – I have a requirement to create a large number of VMs from a template, this is the PowerShell Code I hacked together from a VMTN communities blog post – it’s not pretty but it works for me – you can play with the variables to adjust to your own environment and desired number of VMs.
In my case my template is a Linux VM setup ready to boot from a LiveCD – just so it generates some basic load when it starts up.
There is a bit of clever number formatting which I lifted from this blog post to pad the VM numbers out to 3 digits and make it tidy looking, not entirely sure I understand what it does – but it works!
I am using PowerGUI based on the info at Al’s blog here
Connect-VIServer -Server localhost >$null #Variables $Date=get-date -uformat "%Y%m%d" $NumArray = (1..$HOW_MANY_TO_CREATE) foreach ($number in $numArray ) |
The Results (40 VM’s from template – completed in about 5mins);
Pingback: VMware vSphere - виртуализация ЦОД » Как создать сразу несколько тестовых виртуальных машин из шаблона на VMware vSphere / ESX.
Nice Script.
I have a couple of suggestions that would make the code a tad more elegant, as follows:
#Variables
$NameVM =”vmNested-”
$NameTemplate =”TPL – vmNested-01″
$Datacenter=”v.T.A.R.D.I.S”
$Datastore=”SSD-iSCSI”
$ESX=”vmESXi-4.lab”
$HOW_MANY_TO_CREATE=4
$Date=get-date -uformat “%Y%m%d”
$NumArray = (1..$HOW_MANY_TO_CREATE)
for ([int]$seq=1;$seq -le $HOW_MANY_TO_CREATE;$seq++)
{
$string = $NameVM + ($seq.tostring(“0##”))
“Creating $string”
# Create the VM
New-VM -template (Get-template $NameTemplate) -Name $string -Datastore (Get-datastore $Datastore) -VMHost $ESX
}
Thanks Thomas, the examples you have on your site are probably the most useful I have found… thanks!
Pingback: Top Virtualization Blog Voting Time « Virtualization, Windows, Infrastructure and all that stuff in-between
but where do i need to run this script,
i have PC with 8Gb memory but due to h/w incompaitability i am unable to install esx on thats, so can i run ESXi on Vmware wks(on win7) and then create mutiple ESi host inside Main ESXi(which will be running on vmware wks)
@Maqsood – that would work from a script point of view allowing you to create the VMs but you won’t be able to start any of the vmESX nodes running inside another vmESXi running on workstation as you can’t have a 64-bit nested VM (VM inside another VM)
You could have an ESXi and a vCenter VM on your physical machine then use this script then talks to the vCenter (which controls the vmESXi) and create a bunch of x86 VMs that would run inside the vmESXi VM – that would work, just doesn’t work with x64 VMs.
HTH
Hi,
First of thanks for wonderfull script, I am able to deploy the multiple vm by this script but also also getting some error. I am not sure why these error are coming, is it possible to get some infomation ?
Creating
vmtest01001
New-VM : 10/27/2011 5:40:48 PM New-VM Operation is not valid due to the current state of the object.
At C:\Users\gudhillo\AppData\Local\Temp\1d2ba134-a7e1-440b-9d45-c1e30bbc396e.ps1:32 char:7
+ New-VM <<<< -Name $string -Template $(get-template $strTemplate) -location (get-folder $strLocation) -pool (get-resourcepool $strPool) -VMHost $(Get-VMHos
t $strDestinationHost) -Datastore $(Get-Datastore $strDatastore) -OSCustomizationSpec $(Get-OSCustomizationSpec $strCustomSpec)
+ CategoryInfo : NotSpecified: (:) [New-VM], VimException
+ FullyQualifiedErrorId : Core_BaseCmdlet_UnknownError,VMware.VimAutomation.ViCore.Cmdlets.Commands.NewVM
Regards
Gurjit Dhillon