Public/Get-NLBaselineCANamedLocations.ps1

function Get-NLBaselineCANamedLocations {
    <#
    .SYNOPSIS
    List all Named Locations
     
    .DESCRIPTION
    Lists all Conditional Access named locations in the tenant
    #>

    
    [CmdletBinding()]
    param()
    
    try {
        # Check connection
        $context = Get-MgContext -ErrorAction SilentlyContinue
        if (-not $context -or -not $context.TenantId) {
            Write-Host "Not connected to Microsoft 365. Connecting..." -ForegroundColor Yellow
            Write-Host ""
            $connection = Connect-NLBaselineCA
            if (-not $connection) {
                Write-Error "Cannot connect to Microsoft 365"
                return
            }
            $context = Get-MgContext
        }
        
        Write-Host "Retrieving Named Locations..." -ForegroundColor Yellow
        Write-Host ""
        
        # Try normal cmdlet first, fallback to REST API
        $namedLocations = $null
        try {
            $namedLocations = Get-MgIdentityConditionalAccessNamedLocation -All -ErrorAction Stop
        }
        catch {
            # Use REST API fallback
            $invokeCmd = Get-Command Invoke-MgGraphRequest -ErrorAction SilentlyContinue
            if ($invokeCmd) {
                $response = Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/v1.0/identity/conditionalAccess/namedLocations" -ErrorAction Stop
                $namedLocations = $response.value
            }
            else {
                throw "Cannot retrieve named locations: $_"
            }
        }
        
        if (-not $namedLocations -or $namedLocations.Count -eq 0) {
            Write-Host "No named locations found." -ForegroundColor Yellow
            return
        }
        
        Write-Host "Found $($namedLocations.Count) named location(s):" -ForegroundColor Green
        Write-Host ""
        
        foreach ($location in $namedLocations) {
            Write-Host " $($location.DisplayName)" -ForegroundColor White
            Write-Host " ID: $($location.Id)" -ForegroundColor Gray
            
            if ($location.AdditionalProperties.isTrusted) {
                Write-Host " Type: Trusted IP Range" -ForegroundColor Cyan
                if ($location.AdditionalProperties.ipRanges) {
                    $ipRanges = $location.AdditionalProperties.ipRanges.cidrAddress
                    Write-Host " IP Ranges: $($ipRanges -join ', ')" -ForegroundColor Gray
                }
            }
            else {
                Write-Host " Type: Country/Region" -ForegroundColor Cyan
                if ($location.AdditionalProperties.countriesAndRegions) {
                    $countries = $location.AdditionalProperties.countriesAndRegions
                    Write-Host " Countries: $($countries -join ', ')" -ForegroundColor Gray
                }
            }
            Write-Host ""
        }
    }
    catch {
        Write-Error "Error listing named locations: $_"
    }
}