APICalls/Get-NetBoxDCIM.ps1

function Get-NetBoxDCIM {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [ValidateSet('Devices',
            'Device-Types',
            'Device-Bays',
            'Device-Roles',
            'Device-Bay-Templates',
            'Console-Server-Ports',
            'Console-Ports',
            'Console-Server-Port-Templates',
            'Console-Port-Templates',
            'Connected-Device',
            'Cables',
            'Cable-Terminations',
            'Front-Ports',
            'Front-Port-Templates',
            'Interface-Templates',
            'Interfaces',
            'Inventory-Item-Roles',
            'Inventory-Item-Templates',
            'Inventory-Items',
            'Locations',
            'Manufacturers',
            'Module-Bay-Templates',
            'Module-Bays',
            'Module-Types',
            'Modules',
            'Platforms',
            'Power-Feeds',
            'Power-Outlets',
            'Power-Outlet-Templates',
            'Power-Panels',
            'Power-Ports',
            'Power-Port-Templates',
            'Rack-Reservations',
            'Rack-Roles',
            'Rack-Types',
            'Racks',
            'Rear-Ports',
            'Rear-Port-Templates',
            'Regions',
            'Site-Groups',
            'Sites',
            'Virtual-Chassis',
            'Virtual-Device-Contexts'
        )]
        [String]$QueryObject,

        [String]$ID,

        [switch]$ShowQuery
    )
    begin {
        $Method = 'Get'
        $APICall = 'dcim/'
        $APICall += $QueryObject.ToLower() + '/'
        if ($ID) {
            $APICall += "$ID/"
        }

        $Data = @()
    }
    process {
        try {
            $count = 0
            do {
                if ($PagedData) {
                    $PagedAPICall = "${APICall}?limit=50&offset=$Count"
                }
                else {
                    # first request
                    $PagedAPICall = "${APICall}"
                }
                if ($ShowQuery) {
                    Write-Host $PagedAPICall
                }
                $PagedData = Invoke-NetBoxRestMethod -APICall $PagedAPICall -Method $Method

                # combine the previous object with the new entries
                try {
                    if ($PagedData.results) {
                        $Data += $PagedData.results
                    }
                    else {
                        $Data += $PagedData
                    }
                }
                catch {
                    Write-Error "Unable to combine data. $_"
                }
                $count += 50
            } while ($PagedData.next)
        }
        catch {
            throw
        }
    }
    end {
        return $Data
    }
}