Public/Webinars/Get-ZoomWebinarsFromUser.ps1

<#

.SYNOPSIS
Use this API to list all the webinars that are scheduled by or on-behalf a
user (Webinar host).

.DESCRIPTION
Zoom users with a webinar plan have access to creating and managing Webinars. Webinar allows a host to broadcast a
Zoom meeting to up to 10,000 attendees. Use this API to list all the webinars that are scheduled by or on-behalf a
user (Webinar host).

.PARAMETER UserId
The user ID or email address of the user. For user-level apps, pass `me` as the value for userId.

.PARAMETER Pagesize
The number of records returned within a single API call.

.PARAMETER PageNumber
The current page number of returned records.

.PARAMETER ApiKey
The Api Key.

.PARAMETER ApiSecret
The Api Secret.

.OUTPUTS
Zoom API response.

.LINK

.EXAMPLE
Get-ZoomWebinarsFromUser lskywalker@thejedi.com

.EXAMPLE
Export to CSV the participants from all webinars of a particular name from a given user. Does not take into
account webinars with over 300 participants.

$Ids = ((Get-ZoomWebinarsFromUser myoda@thejedi.com -PageSize 300).webinars | where-object topic -eq 'Training').id
$Ids | foreach-object {
    (Get-ZoomWebinarParticipantsReport $_ -PageSize 300).participants
} | Export-Csv techtalkparticipants.csv

#>


function Get-ZoomWebinarsFromUser {
    [CmdletBinding()]
    param (
        [Parameter(
            Mandatory = $True, 
            ValueFromPipeline = $True, 
            ValueFromPipelineByPropertyName = $True,
            Position = 0
        )]
        [Alias('user_id', 'user')]
        [string[]]$UserId,

        [ValidateRange(1,300)]
        [int]$PageSize = 30,

        [ValidateRange(1,300)]
        [int]$PageNumber = 1,

        [ValidateNotNullOrEmpty()]
        [string]$ApiKey,

        [ValidateNotNullOrEmpty()]
        [string]$ApiSecret
    )

    begin {
        #Generate Headers and JWT (JSON Web Token)
        $Headers = New-ZoomHeaders -ApiKey $ApiKey -ApiSecret $ApiSecret
    }

    process {
        foreach ($id in $UserId) {
            $request = [System.UriBuilder]"https://api.zoom.us/v2/users/$id/webinars"
            $query = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)  
            $query.Add('page_size', $PageSize)
            $query.Add('page_number', $PageNumber)
            $request.Query = $query.toString()
            $request.Query = $query.toString()
            $response = Invoke-ZoomRestMethod -Uri $request.Uri -Headers ([ref]$Headers) -Body $RequestBody -Method GET -ApiKey $ApiKey -ApiSecret $ApiSecret
    
            Write-Output $response
        }
    }
}