How to get the available Azure VM sizes with – Get-AzureRmVMSize

How to get the available Azure VM sizes with – Get-AzureRmVmSize

I was recently working with a customer who was struggling to get a list of available Azure VM sizes for the locations he wanted to deploy Az IaaS VMs.  Whilst I work mainly with VMware technologies a customer is a customer, so I was more than happy to help.


As luck would have it there is a PowerShell module to provide just the information that he was after, Get-AzureRmVmSize.  Included in the AzureRm.Compute PowerShell module.  Assuming you have the modules installed and are already connected to Azure ‘connect-AzureRmAccount’; simple syntax for using this command to pull the VM sizes for the UK West region is;

‘Get-AzureRmVMSize -Location ukwest’

Capture multiple regions and export to CSV

Having a list in PowerShell for a single location is a good first step but what if you want to capture multiple regions?  The following script does exactly that;

'$locations = $null
$vmsizes = $null
$locations = Get-AzureRmLocation | Where-Object {$_.location -in "ukwest","uksouth"}

foreach ($l in $locations)
$vmSizes += Get-AzureRmVmSize -Location $l.Location | Select-Object @{Name="LocationDisplayName"; Expression = {$l.DisplayName}},@{Name="Location"; Expression = {$l.Location}},Name,NumberOfCores,MemoryInMB,MaxDataDiskCount,OSDiskSizeInMB,ResourceDiskSizeInMB

$vmSizes | Export-Csv -Path "AzureVmSizes.csv" -NoTypeInformation'

This script nulls the variables $locations and $vmsizes (to avoid data being appended).  It then sets a variable $locations to the selected Azure regions then for each location listed it performs the Get-AzureRmVMSize, capturing the information we’re interested in, Cores, Name etc… and then exports to a CSV file.

Super useful and very simple to do.