Public/Users/Remove-ZoomUser.ps1

<#

.SYNOPSIS
Delete a user on your account.

.DESCRIPTION
Use this API to disassociate (unlink) a user or permanently delete a user.

.PARAMETER Action
Delete action options:
disassociate - Disassociate a user. This is the default.
delete - Permanently delete a user.
Note: To delete pending user in the account, use disassociate.

.PARAMETER EncryptedEmail
Whether the email address passed for the userId value is an encrypted email address.

.PARAMETER TransferEmail
Transfer email.

.PARAMETER TransferMeeting
Transfer meeting.

.PARAMETER TransferWebinar
Transfer webinar.

.PARAMETER TransferRecording
Transfer recording.

.PARAMETER Transferwhiteboard
When you delete the user, whether to transfer all their Zoom Whiteboard data to another user.

.OUTPUTS
No output. Can use Passthru switch to pass UserId to output.

.EXAMPLE
Remove-ZoomUser 'sjackson@lawfirm.com' -action 'delete' -TransferEmail 'jsmith@lawfirm.com' -TransferMeeting

.LINK
https://marketplace.zoom.us/docs/api-reference/zoom-api/users/userdelete

#>


function Remove-ZoomUser {
    [CmdletBinding(SupportsShouldProcess = $True, ConfirmImpact='Medium')]
    param (
        [Parameter(
            Mandatory = $True, 
            Position = 0, 
            ValueFromPipeline = $True,
            ValueFromPipelineByPropertyName = $True
        )]
        [Alias('Email', 'id')]
        [string[]]$UserId,

        [Parameter(ValueFromPipelineByPropertyName = $True)]
        [ValidateSet('disassociate', 'delete')]
        [string]$Action = 'disassociate',

        [Parameter(ValueFromPipelineByPropertyName = $True)]
        [Alias('encrypted_email')]
        [switch]$EncryptedEmail,
        
        [Parameter(ValueFromPipelineByPropertyName = $True)]
        [Alias('transfer_email')]
        [string]$TransferEmail,
        
        [Parameter(ValueFromPipelineByPropertyName = $True)]
        [Alias('transfer_meeting')]
        [switch]$TransferMeeting,
        
        [Parameter(ValueFromPipelineByPropertyName = $True)]
        [Alias('transfer_webinar')]
        [switch]$TransferWebinar,
        
        [Parameter(ValueFromPipelineByPropertyName = $True)]
        [Alias('transfer_recording')]
        [switch]$TransferRecording,

        [Parameter(ValueFromPipelineByPropertyName = $True)]
        [Alias('transfer_whiteboard')]
        [switch]$TransferWhiteboard,

        [switch]$Passthru
    )

    process {
        foreach ($user in $UserId) {
            $request = [System.UriBuilder]"https://api.zoom.us/v2/users/$user"
            $query = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
            $query.Add('action', $Action)

            if ($PSBoundParameters.ContainsKey('EncryptedEmail')) {
                $query.Add('encrypted_email', $EncryptedEmail)
            }

            if ($PSBoundParameters.ContainsKey('TransferEmail')) {
                $query.Add('transfer_email', $TransferEmail)
            }

            if ($PSBoundParameters.ContainsKey('TransferMeeting')) {
                $query.Add('transfer_meeting', $TransferMeeting)
            }

            if ($PSBoundParameters.ContainsKey('TransferWebinar')) {
                $query.Add('transfer_webinar', $TransferWebinar)
            }

            if ($PSBoundParameters.ContainsKey('TransferRecording')) {
                $query.Add('transfer_recording', $TransferRecording)
            }

            if ($PSBoundParameters.ContainsKey('TransferWhiteboard')) {
                $query.Add('transfer_whiteboard', $Transferwhiteboard)
            }
            
            $request.Query = $query.ToString().ToLower()
            
            if ($PScmdlet.ShouldProcess($user, 'Remove')) {
                $response = Invoke-ZoomRestMethod -Uri $request.Uri -Method DELETE

                if ($Passthru) {
                    Write-Output $UserId
                } else {
                    Write-Output $response
                }
                
            }
        }
    }
}