Azure PowerShell: Provisioning Multiple VMs

To create new VMs for use with the Virtual Machines and Virtual Networks preview feature for Azure, you can use the Azure PowerShell Commands available at https://www.windowsazure.com/en-us/downloads/. The specific commands to provision a VM are…

The examples on how to use this are typically as follows:

 C:\PS>New-AzureVMConfig -Name "MyNewVM" -InstanceSize ExtraSmall -ImageName "MyImageName"
           | Add-AzureProvisioningConfig -Windows -Password $adminPassword `
           | New-AzureVM -ServiceName "MySvc2"

 

This is fine when deploying creating one Virtual Machine, however this can be slightly unreliable when you need to create multiple VMs in quick succession. I would often see that the VM I created was stopped, and the following error was shown:

“The server encountered an internal error. Please retry the request. The long running operation tracking ID was: [UNIQUEID]”.

To avoid errors, you can use the above commands in a different way to that specified in the examples, creating multiple configs, but only calling New-AzureVM once (passing it an array of configs), as well as giving the deployment a unique name. The example below illustrates this…

 $vmConfig = New-AzureVMConfig -Name "MyVMName1" -InstanceSize "Small" -ImageName "MyImage.vhd" 
 $vmDetails = Add-AzureProvisioningConfig -Windows -Password "password" -VM $vmConfig
  
  
 $vmConfig2 = New-AzureVMConfig -Name "MyVMName2" -InstanceSize "Small" -ImageName "MyImage.vhd" 
 $vmDetails2 = Add-AzureProvisioningConfig -Windows -Password "password" -VM $vmConfig2
  
  
 New-AzureVM -ServiceName "MyService" -VMs @($vmDetails, $vmDetails2) -DeploymentName "MyUniqueDeploymentName"
  

Note, there is also some documentation of this available at https://msdn.microsoft.com/en-us/library/windowsazure/jj835085.aspx (see the section on “Creating Multiple Virtual Machines”.

 

Written by Rob Nowik