Hyper-V VM Tribbles – VMs Everywhere!


I was thinking this week of how to demonstration / highlight the cool new processing capacity of new multi-core processors.

I came up with a really short PowerShell script (based on James O’Neill’s Hyper-V management library available on Codeplex) that creates a specific number of VMs on Hyper-V using a base VHD file and differencing disks.  It’s really easy, and ultimately could be the basis for any home grown Virtual Desktop Infrastructure or “cloud on demand” service.

The script is really very simple – here’s the copy I used to make the screen shot shown:

# requires Hyper-V Management Library from Codeplex (http://pshyperv.codeplex.com/)
#uses defaults for RAM and does not setup NIC - easy to adjust

$MaxVMs = 24
$Diff_Dir = "C:\ClusterStorage\Volume1\DIFFs"
$BaseVM = "C:\ClusterStorage\Volume1\VDI_Fun\WS2008R2_EnterpriseCore_x64.vhd"
$index = 1
do {
     new-vhd $new_vhd_name -parentVHD $BaseVM -wait
     $myVM = (new-VM $new_vm_name)
     add-vmdisk $myVM 0 0 $new_VHD_name
     Start-VM $myVM
     new-vmconnectsession -vM $myVM
     # next line WAITS for the new VM to respond before going on... comment out for more RAPID provisioning
     # test-vmheartbeat $myVM -timeout 300
While ($index -le $MaxVMs)

So what did this snippet do on a server in my tiny little lab?  It quickly created 24 VM's based on a single Windows Server 2008 R2 Core installation VHD I had previously created!  This sort of script works against Hyper-V Server (and even runs on Hyper-V Server 2008 R2 since it has PowerShell support!).

Can you imagine how easy (and cheap) it could be to spin up VMs of all kinds with scripts like this!  It’s even better with the System Center tools, but you can’t beat the price of Hyper-V Server 2008 R2 and the PowerShell library on Codeplex!.


Comments (5)
  1. troth says:

    thanks for the link I’ll take a look at it!


  2. troth says:

    just saved me a bunch of time, was just starting to create a script just list this!


  3. JohnKelbley says:

    Tony – Glad you found it useful!

    I’m pretty busy the next few weeks, but Michael Greene (http://blogs.technet.com/migreene/) and I are going to play around with this a bit and work out some other interesting scenarios as time permits.


  4. troth says:

    I have a fundemental issue that I’d like to ask but everybody gets stuck in the MS mantra and they don’t think outside the box.  I want to use differencing disks (Diffs) in production but everytime I bring this up everybody has a fit..  I only want to do the boot drive nothing else.  I’d have a small csv volume for the parent and a larger one for the child’s.  My theory being that almost nothing is going to get written to the childs after the initial install of applications.  We only apply security hot fixes so that won’t change much overall and will happen once a month.  Does this sound reasonable?


  5. JohnKelbley says:

    Tony – I haven’t done VDI work with CSV which sounds like the scenario you are proposing.  

    I like using differencing disks for VDI sometimes, it saves disk and speeds up provisioning of new VMs.  I’m not keen on using differencing disk for other than test or VDI.

    I’m not clear why you would use differencing disk with CSVs for VDI.  That means you are making "disposable" VMs highly availble?  

    It might make sense to be able to provision off of a single VHD – but that seems expensive to me.  Here’s a post that goes through that sort of thing from September that might be an interesting read:  https://blogs.technet.com/ddc_dudes/archive/2009/09/08/rapid-provisioning-with-scvmm-2008-r2.aspx

Comments are closed.

Skip to main content