Get-VM-by-Zones/get-vms-by-zone.ps1 (120 lines of code) (raw):
<#
.SYNOPSIS
Shows VM availability in zones for a certain region
.DESCRIPTION
The script will show all VMs available in zones in a certain region, including the zone number associated to the subscription
.PARAMETER Region
The Azure region name
.EXAMPLE
./Get-VMs-by-Zone.ps1 -Region westeurope
Example output:
VM Type Zone 1 Zone 2 Zone 3
------- ------ ------ ------
E16_v3 X X X
E16-4s_v3 X X X
E16-8s_v3 X X X
E16s_v3 X X X
E2_v3 X X X
E20_v3 X X X
E20s_v3 X X X
E2s_v3 X X X
E32_v3 X X X
E32-16s_v3 X X X
E32-8s_v3 X X X
E32s_v3 X X X
E4_v3 X X X
E4-2s_v3 X X X
E48_v3 X X X
E48s_v3 X X X
E4s_v3 X X X
E64_v3 X X X
E64-16s_v3 X X X
E64-32s_v3 X X X
E64i_v3 X X X
E64is_v3 X X X
E64s_v3 X X X
E8_v3 X X X
E8-2s_v3 X X X
E8-4s_v3 X X X
E8s_v3 X X X
M128 X X X
M128-32ms X X X
M128-64ms X X X
M128m X X X
M128ms X X X
M128s X X X
M16-4ms X X X
M16-8ms X X X
M16ms X X X
M208ms_v2 X X
M208s_v2 X X
M32-16ms X X X
M32-8ms X X X
M32ls X X X
M32ms X X X
M32ts X X X
M416ms_v2 X X
M416s_v2 X X
M64 X X X
M64-16ms X X X
M64-32ms X X X
M64ls X X X
M64m X X X
M64ms X X X
M64s X X X
M8-2ms X X X
M8-4ms X X X
M8ms X X X
.LINK
https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities
.NOTES
v0.1 - Initial version
v0.2 - Update required module specification to use Az.Compute 4.2.1 which allows location parameter
for better filtering of results
#>
<#
Copyright (c) Microsoft Corporation.
Licensed under the MIT license.
#>
#Requires -Module @{ ModuleName = 'Az.Compute'; ModuleVersion = '4.2.1' }
#Requires -Version 5.1
param(
#Azure Subscription Name
[Parameter(Mandatory = $true)][string]$SubscriptionName,
#Azure Region, use Get-AzLocation to get region names
[string]$region = "westeurope",
#VM Types, use one or multiple series, e.g. "D,E,M"
[string[]]$vmseries = "D,E,M"
)
# select subscription
$Subscription = Get-AzSubscription -SubscriptionName $SubscriptionName
if (-Not $Subscription) {
Write-Host -ForegroundColor Red -BackgroundColor White "Sorry, it seems you are not connected to Azure or don't have access to the subscription. Please use Connect-AzAccount to connect."
exit
}
Select-AzSubscription -Subscription $SubscriptionName -Force
$output = @()
$vms = Get-AzComputeResourceSku -Location $region | Where-Object { $_.ResourceType -eq 'virtualMachines' };
# $vmseries = @("M","D")
foreach ($vm in $vms) {
$vmtype = $vm.Name.replace("Standard_", $null)
if ($vmseries -match $vmtype.substring(0, 1)) {
$zone1 = ""
$zone2 = ""
$zone3 = ""
$outputtemp = New-Object -TypeName PSObject
foreach ($zone in $vm.locationinfo.zones) {
switch ($zone) {
1 { $zone1 = "X" }
2 { $zone2 = "X" }
3 { $zone3 = "X" }
}
}
$outputtemp | Add-Member -MemberType NoteProperty -Name "VM Type" -Value $vmtype
$outputtemp | Add-Member -MemberType NoteProperty -Name "Zone 1" -Value $zone1
$outputtemp | Add-Member -MemberType NoteProperty -Name "Zone 2" -Value $zone2
$outputtemp | Add-Member -MemberType NoteProperty -Name "Zone 3" -Value $zone3
$output += $outputtemp
}
}
$output | Sort-Object -property "VM Type" | Format-Table