AvZone-Mapping/avzone-mapping.ps1 (74 lines of code) (raw):

<# .SYNOPSIS Map logical zones of different subscriptions .DESCRIPTION The script will map the logical zones of multiple subscriptions with each other. .LINK https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities #> <# Copyright (c) Microsoft Corporation. Licensed under the MIT license. #> #requires -version 7.1 #requires -modules Az [CmdletBinding()] param ( [parameter(Mandatory=$true)][string]$subscriptionId, [parameter(Mandatory=$true)][string[]]$subscriptionPeers, [parameter(Mandatory=$true)][string]$region ) # create JSON object for web request with subscriptions $subscriptionPeersParameter = "" | Select-Object location,subscriptionIds $subscriptionPeersParameter.location = $region $subscriptionPeersParameter.subscriptionIds = @() foreach ($subscription in $subscriptionPeers) { $subscriptionPeersParameter.subscriptionIds += "subscriptions/" + $subscription } $subscriptionPeersJson = $subscriptionPeersParameter | ConvertTo-Json # Get Azure Context try { $azContext = Get-AzContext } catch { Write-Host "An error occurred:" Write-Host "Please check if you are logged on to Azure, you can use Connect-AzAccount to log in" } # get access token for REST call $azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile $profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($azProfile) $token = $profileClient.AcquireAccessToken($azContext.Subscription.TenantId) $authHeader = @{ 'Content-Type'='application/json' 'Authorization'='Bearer ' + $token.AccessToken } $feature = Get-AzProviderFeature -ProviderNamespace Microsoft.Resources -FeatureName AvailabilityZonePeering if ($feature.RegistrationState -eq "Registered") { # feature registered # continuing } else { Write-Host "Feature not registered" Write-Host "Please register feature using:" Write-Host "Register-AzProviderFeature -FeatureName AvailabilityZonePeering -ProviderNamespace Microsoft.Resources" exit } # create parameter $param = @{ Uri = "https://management.azure.com/subscriptions/${subscriptionId}/providers/Microsoft.Resources/checkZonePeers/?api-version=2020-01-01"; Method = 'Post'; Body = $subscriptionPeersJson; Headers = $authHeader } # Invoke the REST API $response = Invoke-RestMethod @param # Output Write-Host "" Write-Host "SubscriptionId:" $response.subscriptionId Write-Host "" foreach ($i in $response.availabilityZonePeers.availabilityZone) { foreach ($zone in $response.availabilityZonePeers[$i-1].peers ) { Write-Host "Zone $i matches zone" $zone.availabilityZone "in" $zone.subscriptionId } Write-Host "" }