Public/Meetings/New-ZoomMeetingPoll.ps1

<#

.SYNOPSIS
Creates a new Zoom meeting poll.
.DESCRIPTION
Creates a new Zoom meeting poll. Meeting must be a scheduled meeting.
Instant meetings do not have polling features enabled.
.PARAMETER MeetingId
The meeting ID.
.PARAMETER Title
Poll title.
.PARAMETER Questions
Array of questions. All elements should be HashTable.
Requires three keys:
[string]name - Question name
[string]type - Question type
    single - Single choice
    multiple - Multiple choice
[string[]]answers - Answers of the question

Example:
    $Questions = @(
        @{name = 'Favorite number?'; type = 'multiple'; answers = @('1', '2', '3')},
        @{name = 'Favorite letter?'; type = 'multiple'; answers = @('a', 'b', 'c')}
    )
Can also pass New-ZoomMeetingPollQuestion as an array. Example:
$Questions = @(
    (New-ZoomMeetingPollQuestion -Name 'Favorite Number?' -type 'multiple' -answers '1','2','3'),
    (New-ZoomMeetingPollQuestion -Name 'Favorite letter??' -type 'multiple' -answers 'a','b','c')
)
.PARAMETER ApiKey
The Api Key.
.PARAMETER ApiSecret
The Api Secret.
.EXAMPLE
$Questions = @(
    @{name = 'Favorite number?'; type = 'multiple'; answers = @('1', '2', '3')},
    @{name = 'Favorite letter?'; type = 'multiple'; answers = @('a', 'b', 'c')}
)

New-ZoomMeetingPoll 123456789 -Title 'Favorite numbers and letters' -Questions $Questions


#>


function New-ZoomMeetingPoll {
    [CmdletBinding()]
    param (
        [Parameter(
            Mandatory = $True, 
            ValueFromPipeline = $True, 
            ValueFromPipelineByPropertyName = $True,
            Position = 0
        )]
        [Alias('meeting_id')]
        [string]$MeetingId,

        [Parameter(ValueFromPipelineByPropertyName = $True)]
        [string]$Title,

        [Parameter(ValueFromPipelineByPropertyName = $True)]
        [System.Collections.IDictionary[]]$Questions,
        
        [ValidateNotNullOrEmpty()]
        [string]$ApiKey,

        [ValidateNotNullOrEmpty()]
        [string]$ApiSecret
    )

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

    process {
        $Request = [System.UriBuilder]"https://api.zoom.us/v2/meetings/$MeetingId/polls"
        $RequestBody = @{}

        if ($PSBoundParameters.ContainsKey('Title')) {
            $RequestBody.Add('title', $Title)
        }        

        if ($PSBoundParameters.ContainsKey('Questions')) {
            $Items = @($Questions.ForEach( {
                        @{
                            name    = [string]$_.name
                            type    = ([string]$_.type).ToLower() # "single" or "multiple"
                            answers = [string[]]@($_.answers)
                        }
                    }))
            $RequestBody.Add('questions', $Items)
        }

        $RequestBody = $RequestBody | ConvertTo-Json -Depth 10
        $response = Invoke-ZoomRestMethod -Uri $request.Uri -Headers ([ref]$Headers) -Body $RequestBody -Method POST -ApiKey $ApiKey -ApiSecret $ApiSecret

        Write-Output $response
    }
}