Functions/Get-DisconnectedPeerings.ps1

function Get-DisconnectedPeerings {
<#
    .SYNOPSIS
        Gets disconnected virtual network peerings
 
    .DESCRIPTION
        Retrieves virtual network peerings that are in a disconnected state from a specified virtual network.
 
    .EXAMPLE
        Get-DisconnectedPeerings -VirtualNetworkName "AZ-EU-NORTH-VNET01" -ResourceGroupName "cic-network-ew2-ns-core-rg-01"
 
        Gets all disconnected peerings from the specified virtual network.
 
    .EXAMPLE
        Get-DisconnectedPeerings -VirtualNetworkName "MyVNet" -ResourceGroupName "MyRG" -AzSubscription "MySubscription"
 
        Gets all disconnected peerings from the specified virtual network in a specific subscription.
 
    .INPUTS
        Input is from command line or called from a script.
 
    .OUTPUTS
        Outputs disconnected peering information to screen
 
    .NOTES
        Author: Lars Panzerbjørn
        Creation Date: 2026.01.19
#>

    [CmdletBinding()]
    param
    (
        [Parameter(
            Mandatory,
            ValueFromPipeline=$True,
            ValueFromPipelineByPropertyName=$True,
            HelpMessage='Name of the virtual network to check for disconnected peerings')]
        [string]$VirtualNetworkName,

        [Parameter(
            Mandatory,
            ValueFromPipeline=$True,
            ValueFromPipelineByPropertyName=$True,
            HelpMessage='Resource group name containing the virtual network')]
        [string]$ResourceGroupName,

        [Parameter(
            ValueFromPipeline=$True,
            ValueFromPipelineByPropertyName=$True,
            HelpMessage='Which Azure subscription would you like to target?')]
        [Alias('AzSub')]
        [string]$AzSubscription
    )

    BEGIN{
        Write-Verbose "Beginning $($MyInvocation.Mycommand)"
    }

    PROCESS{
        Write-Verbose "Processing $($MyInvocation.Mycommand)"

        IF($AzSubscription) {
            Write-Verbose "Setting Azure context to subscription: $AzSubscription"
            $Subscription = Get-AzSubscription -SubscriptionName $AzSubscription
            Set-AzContext -SubscriptionId $Subscription.Id | Out-Null
        }

        Write-Verbose "Getting virtual network: $VirtualNetworkName in resource group: $ResourceGroupName"
        $VNet = Get-AzVirtualNetwork -Name $VirtualNetworkName -ResourceGroupName $ResourceGroupName

        Write-Verbose "Filtering for disconnected peerings"
        $DisconnectedPeerings = $VNet.VirtualNetworkPeerings | Where-Object { $_.PeeringState -eq "Disconnected" } | Select-Object Name, PeeringState, RemoteVirtualNetwork

        IF($DisconnectedPeerings) {
            Write-Verbose "Found $($DisconnectedPeerings.Count) disconnected peering(s)"
            $DisconnectedPeerings
        }
        else {
            Write-Verbose "No disconnected peerings found"
        }
    }

    END{
        Write-Verbose "Ending $($MyInvocation.Mycommand)"
    }
}