Examples/MerakiNetworkSegments.ps1

using namespace System.Collections.Generic

param(
    [string]$ProfileName
)

$Segments = [List[object]]::New()

$Networks = Get-MerakiNetworks -profileName $ProfileName

foreach ($Network in $Networks) {
    Write-Host "$($Network.Name) : $($Network.id)"
    $Devices = Get-MerakiNetworkDevices -NetworkId $Network.Id | Where-Object {$_.model -like "MX*" -or $_.model -like "MS*"}
    $Appliances = $Devices.where({$_.Model -like "MX*"})
    $Switches = $Devices.Where({$_.Model -like "MS*"})
    try {
        $Stacks = Get-MerakiSwitchStack -NetworkId Network.Id
    } catch {
        # Do nothing
    }

    foreach ($Appliance in $Appliances) {
        try {
            $VLANS = Get-MerakiApplianceVLANS -Id $Network.Id 
        } catch {
            $VLANS = Get-MerakiApplianceSingleLan -Id $Network.Id
        }
        foreach ($VLAN in $VLANS) {
            $Segments.Add(
                [PSCustomObject]@{
                    'IP Range (CIDR)' = $VLAN.Subnet
                    'Segment High Level Description' = $Network.Name
                }
            )
        }
    }

    foreach ($Switch in $Switches) {
        $Interfaces = Get-MerakiSwitchRoutingInterface -serial $switch.serial 
        foreach ($Interface in $Interfaces) {
            if ($Interface.Subnet) {
                $Segments.Add( 
                    [PSCustomObject]@{
                        'IP Range (CIDR)' = $Interface.Subnet
                        'Segment High Level Description' = "$($Network.Name) : $($Interface.Name)"
                    }
                )
            }
        }
    }

    foreach ($Stack in $Stacks) {
        $Interfaces = Get-MerakiSwitchStackRoutingInterface -StackId $Stack.Id
        foreach ($Interface in $Interfaces) {
            $Segments.Add( 
                [PSCustomObject]@{
                    'IP Range (CIDR)' = $Interface.Subnet
                    'Segment High Level Description' = "$($Network.Name) : $($Interface.Name)"
                }
            )
        }
    }
}

return $Segments.ToArray()