Public/Phone/UserPhone/Add-ZoomPhoneUserNumber.ps1
<# .SYNOPSIS Add an available phone number to a Zoom User. .PARAMETER Number Phone number to be assigned to zoom user. Use following command to get available phone numbers for Zoom instance. Get-ZoomPhoneNumber .OUTPUTS No output. Can use Passthru switch to pass UserId to output. .EXAMPLE Add-ZoomPhoneUserNumber -UserId askywakler@thejedi.com -PhoneNumber +18011011101 .EXAMPLE Add-ZoomPhoneUserNumber -UserId askywakler@thejedi.com -PhoneNumber 18011011101 .LINK https://developers.zoom.us/docs/api/rest/reference/phone/methods/#operation/assignCallingPlan #> function Add-ZoomPhoneUserNumber { [alias("Add-ZoomPhoneUserNumbers")] [CmdletBinding(SupportsShouldProcess = $True)] Param( [Parameter( Mandatory = $True, ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True, Position = 0 )] [ValidateLength(1, 128)] [Alias('Email', 'Emails', 'EmailAddress', 'EmailAddresses', 'Id', 'ids', 'user_id', 'user', 'users', 'userids')] [string]$UserId, [Parameter( Mandatory = $True, Position = 1 )] [Alias('Phone_Number')] [ValidateScript({(($_ -match "^\+[0-9]+$") -or ($_ -match "^[0-9]+$"))})] [string]$Number, [switch]$PassThru ) process { foreach ($user in $UserId) { if ($number -match "^[0-9]+") { $number = "{0}$number" -f '+' } $NumberInfo = Get-ZoomPhoneNumber -ErrorAction Stop | Where-object Number -eq $number if (-not ($NumberInfo)) { Throw "Provided number was not found in the accounts's phone number list" } if ([bool]($NumberInfo.PSobject.Properties.name -match "assignee")) { Throw "Number is already assigned to another user" } $Request = [System.UriBuilder]"https://api.$ZoomURI/v2/phone/users/$user/phone_numbers" $RequestBody = @{ } $ChosenNumber = @{ } $KeyValuePairs = @{ 'id' = $NumberInfo.id 'number' = $NumberInfo.number } $KeyValuePairs.Keys | ForEach-Object { if (-not ([string]::IsNullOrEmpty($KeyValuePairs.$_))) { $ChosenNumber.Add($_, $KeyValuePairs.$_) } } $ChosenNumber = @($ChosenNumber) $RequestBody.Add("phone_numbers", $ChosenNumber) $RequestBody = $RequestBody | ConvertTo-Json $Message = @" Method: POST URI: $($Request | Select-Object -ExpandProperty URI | Select-Object -ExpandProperty AbsoluteUri) Body: $RequestBody "@ if ($pscmdlet.ShouldProcess($Message, $UserId, "Adding $Number")) { $response = Invoke-ZoomRestMethod -Uri $request.Uri -Body $requestBody -Method POST if (-not $PassThru) { Write-Output $response } } } if ($PassThru) { Write-Output $UserId } } } |