Public/Rooms/Get-ZoomRoomLocations.ps1

<#

.SYNOPSIS
Retrieve all location ids or filter on Parent Location ID.

.DESCRIPTION
Retrieve all location ids or filter on Parent Location ID.

.PARAMETER ParentLocationId
A unique identifier for the parent location. For instance, if a Zoom Room is located in Floor 1 of Building A,
the location of Building A will be the parent location of Floor 1. Use this parameter to filter the response
by a specific location hierarchy level.

.PARAMETER PageSize
The number of records returned within a single API call (Min 30 - MAX 300).

.PARAMETER NextPageToken
The next page token is used to paginate through large result sets. A next page token will be returned whenever the
set of available results exceeds the current page size. The expiration period for this token is 15 minutes.


.OUTPUTS
When using -Full switch, receives JSON Response that looks like:
    page_size next_page_token locations
--------- --------------- ---------
      300 {@{id=hSCAvg9rR3j42iuMjMddzw..}

When not using -Full, id, name, parent_location_id, type will be returned:
   id name parent_location_id type
-- ---- ------------------ ----
AhH8cXHQSxs0ehdPyZbJLQ Coglin St KSq88chVTeS4cSCLtrt8fA campus
WU5haagyThudC9HGfeJo3g London FGLxfHIKSlmfM_AFdHoGpg city
hSCAvg9rR3m42iuMjMbdzw Australia ltlBo0a8TnWuTkgJG8gV3g country
pMwBGgUfTvKXwj16wXVJ4w Level 11 eKeAS1geQhyKJvnYi-Khww floor
DgaiM8z6ReCOWNFCYoqd1Q Oxford 03Do9TN_T1CrOD_FURePsg state

.LINK
https://marketplace.zoom.us/docs/api-reference/zoom-api/rooms-location/listzrlocations

.EXAMPLE
Get-ZoomRoomLocations

.EXAMPLE
Get-ZoomRoomLocations -ParentLocationId "_AFlXw-FTwGS7BrO1QupVA"

#>


function Get-ZoomRoomLocations {
    [CmdletBinding()]
   param (
        [Parameter(Mandatory = $false)]
        [STRING]$ParentLocationId,

        #The number of records returned within a single API call (Zoom default = 30)
        [Parameter(
            ValueFromPipelineByPropertyName = $True, 
            Position = 2
        )]
        [ValidateRange(30, 300)]
        [Alias('page_size')]
        [int]$PageSize = 30,

        # The next page token is used to paginate through large result sets. A next page token will be returned
        # whenever the set of available results exceeds the current page size. The expiration period for this token
        # is 15 minutes.
        [Alias('next_page_token')]
        [string]$NextPageToken,

        [switch]$Full = $False
     ) 

    process {
        $Request = [System.UriBuilder]"https://api.$ZoomURI/v2/rooms/locations"
        $query = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
        $query.Add('page_size', $PageSize)

        if ($ParentLocationId) {
            $query.Add('parent_location_id', $ParentLocationId)
        }

        if ($NextPageToken) {
            $query.Add('next_page_token', $NextPageToken)
        }

        $Request.Query = $query.ToString()

        $response = Invoke-ZoomRestMethod -Uri $request.Uri -Method GET

        if ($Full) {
            Write-Output $response
        }
        else {
            Write-Output $response.locations
        }
        
    }
}