Public/Users/Get-ZoomUsers.ps1
<# .SYNOPSIS List users on a Zoom account. .DESCRIPTION List users on a Zoom account. The Zoom API works similarly to browsing users on Zoom's website. Because of this, API calls require a page number (default is 1) and page size (default is 30). .PARAMETER Status User statuses: Active - Users with an active status. This is the default status. Inactive - Users with an inactive status. Pending - Users with a pending status. .PARAMETER PageSize The number of records returned within a single API call. Default value is 30. Maximum value is 300. .PARAMETER PageNumber The current page number of returned records. Default value is 1. .PARAMETER FullApiResponse The switch FullApiResponse will return the default Zoom API response. .PARAMETER AllPages Returns all pages. The default API response returns the first page of users. This loops through each page and puts them together then returns all of the results. This only returns the inputted status (ie, only active, inactive or pending). .LINK https://marketplace.zoom.us/docs/api-reference/zoom-api/users/users .EXAMPLE Return the first page of active users. Get-ZoomUsers .EXAMPLE Return the first page of inactive users. Get-ZoomUsers -Status inactive -PageSize 50 .EXAMPLE Return active user emails. (Get-ZoomUsers -PageSize 300 -pagenumber 3 -status active).Email .EXAMPLE Return all active users. Get-ZoomUsers -AllPages .EXAMPLE Return all inactive users. Get-ZoomUsers -Status Inactive -AllPages #> function Get-ZoomUsers { [CmdletBinding()] param ( [Parameter( ValueFromPipelineByPropertyName = $True, ParameterSetName = 'Default' )] [Parameter( ValueFromPipelineByPropertyName = $True, ParameterSetName = 'All' )] [Parameter( ValueFromPipelineByPropertyName = $True, ParameterSetName = 'FullApiResponse' )] [ValidateSet('active', 'inactive', 'pending')] [string]$Status = 'active', [Parameter( ValueFromPipelineByPropertyName = $True, ParameterSetName = 'Default' )] [Parameter( ValueFromPipelineByPropertyName = $True, ParameterSetName = 'All' )] [Parameter( ValueFromPipelineByPropertyName = $True, ParameterSetName = 'FullApiResponse' )] [ValidateRange(1, 300)] [Alias('page_size')] [int]$PageSize = 30, [Parameter( ValueFromPipelineByPropertyName = $True, ParameterSetName = 'Default' )] [Parameter( ValueFromPipelineByPropertyName = $True, ParameterSetName = 'All' )] [Parameter( ValueFromPipelineByPropertyName = $True, ParameterSetName = 'FullApiResponse' )] [Alias('page_number')] [int]$PageNumber = 1, [Parameter( ValueFromPipelineByPropertyName = $True, ParameterSetName = 'Default' )] [Parameter( ValueFromPipelineByPropertyName = $True, ParameterSetName = 'All' )] [Parameter( ValueFromPipelineByPropertyName = $True, ParameterSetName = 'FullApiResponse' )] [Alias('role_id')] [int]$RoleId, [Parameter( ParameterSetName = 'FullApiResponse', Mandatory = $True )] [switch]$FullApiResponse, [Parameter( ParameterSetName = 'All', Mandatory = $True )] [switch]$AllPages ) process { $Request = [System.UriBuilder]"https://api.$ZoomURI/v2/users/" $query = [System.Web.HttpUtility]::ParseQueryString([String]::Empty) $query.Add('status', $Status) $query.Add('page_size', $PageSize) $query.Add('page_number', $PageNumber) if ($PSBoundParameters.ContainsKey('RoleId')) { $query.Add('role_id', $RoleId) } $Request.Query = $query.ToString() $response = Invoke-ZoomRestMethod -Uri $request.Uri -Method GET if ($FullApiResponse) { Write-Output $response } elseif ($AllPages) { $params = @{} $allUsers = @() if ($PSBoundParameters.ContainsKey('Status')){ $params.Add('status', $Status) } if ($PSBoundParameters.ContainsKey('RoleId')){ $params.Add('role_id', $RoleId) } $pageCount = (Get-ZoomUsers -PageSize 300 @params -FullApiResponse).page_count while ($pageCount -gt 0){ Write-Verbose 'Adding users from page $pageCount' $allusers += (Get-ZoomUsers -PageNumber $pageCount -PageSize 300 @params) $pageCount-- } Write-Output $allUsers } else { Write-Output $response.Users } } } |