Private/New-ExoURL.ps1
function New-ExoURL { [CmdletBinding()] param( [string]$identity, [string]$subset, [string]$subsettype, [String]$endpoint, [hashtable]$ParameterList ) Write-Verbose "Generating EXO URL" Write-Verbose "Parameters for exo URL:" Write-Verbose $PSBoundParameters.GetEnumerator() $nvCollection = [System.Web.HttpUtility]::ParseQueryString([String]::Empty) $uriRequest = if ($null -eq $PSBoundParameters.identity) { if ($PSBoundParameters.ParameterList) { $PSBoundParameters.ParameterList.GetEnumerator() | ForEach-Object { $nvcollection.add($_.Key, $_.Value) } } [System.UriBuilder]"$script:baseurl/$endpoint" } else { if ($PSBoundParameters.ParameterList) { $PSBoundParameters.ParameterList.GetEnumerator() | ForEach-Object { $nvcollection.add($_.Key, $_.Value) } } $email = ($identity -split ':' | Select-Object -First 1) $Bytes = [System.Text.Encoding]::UTF8.GetBytes($email) $base64IdentityParam = [Convert]::ToBase64String($Bytes) if (($identity -split ':') -gt 1 -and $subsettype -in @("MailboxFolderPermission", "MailboxFolderStatistics")) { $subsetfolder = $identity -split ':' | select-object -Last 1 if ($subsetfolder -eq $email) { $subsetfolder = '\' } $Bytes = [System.Text.Encoding]::UTF8.GetBytes($subsetfolder) $subsetparam = [Convert]::ToBase64String($Bytes) [System.UriBuilder]"$script:baseurl/$($endpoint)('$base64IdentityParam')/$($subset)('$subsetparam')/$subsettype" $nvcollection.add('IsUsingMailboxFolderId', $true) } else { if ($subsettype -eq "Exchange.GetMailboxFolderStatistics") { $subsettype = "$($subsettype)(folderscope=Exchange.ElcFolderType'All')" } [System.UriBuilder]"$script:baseurl/$($endpoint)('$base64IdentityParam')/$($subset)/$($subsettype)" } $nvcollection.add('IsEncoded', $true) } $uriRequest.Query = $nvCollection.ToString() return $uriRequest.uri.OriginalString } |