internal/functions/connectivity/Invoke-RestPOST.ps1
function Invoke-RestPOST { [CmdletBinding()] param ( [Parameter(Position = 0, Mandatory = $true)] [string] $RequestURL, [Parameter(Position = 1, Mandatory = $true)] [String] $MailboxName, [Parameter(Position = 2, Mandatory = $true)] [System.Net.Http.HttpClient] $HttpClient, [Parameter(Position = 3, Mandatory = $false)] [psobject] $AccessToken, [Parameter(Position = 4, Mandatory = $true)] [PSCustomObject] $Content, [Parameter(Position = 5, Mandatory = $false)] [switch] $BasicAuthentication, [Parameter(Position = 6, Mandatory = $false)] [System.Management.Automation.PSCredential]$Credentials, [Parameter(Position = 7, Mandatory = $false)] [string] $TimeZone ) process { if($Script:TraceRequest){ write-host $RequestURL } if($BasicAuthentication.IsPresent){ $psString = $Credentials.UserName.ToString() + ":" + $Credentials.GetNetworkCredential().password.ToString() $psbyteArray = [System.Text.Encoding]::ASCII.($psString); $HttpClient.DefaultRequestHeaders.Authorization = New-Object System.Net.Http.Headers.AuthenticationHeaderValue("Basic", [System.Convert]::ToBase64String($psbyteArray)); }else{ #Check for expired Token $minTime = new-object DateTime(1970, 1, 1, 0, 0, 0, 0, [System.DateTimeKind]::Utc); $expiry = $minTime.AddSeconds($AccessToken.expires_on) if ($expiry -le [DateTime]::Now.ToUniversalTime()) { if ([bool]($AccessToken.PSobject.Properties.name -match "refresh_token")) { write-host "Refresh Token" $AccessToken = Invoke-RefreshAccessToken -MailboxName $MailboxName -AccessToken $AccessToken } else { throw "App Token has expired a new access token is required rerun get-apptoken" } } $HttpClient.DefaultRequestHeaders.Authorization = New-Object System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", (ConvertFrom-SecureStringCustom -SecureToken $AccessToken.access_token)); } $PostContent = New-Object System.Net.Http.StringContent($Content, [System.Text.Encoding]::UTF8, "application/json") if([String]::IsNullOrEmpty($TimeZone)){ $TimeZone = [TimeZoneInfo]::Local.Id } $HttpClient.DefaultRequestHeaders.Add("Prefer", ("outlook.timezone=`"" + $TimeZone + "`"")) $ClientResult = $HttpClient.PostAsync([Uri]($RequestURL), $PostContent) if ($ClientResult.Result.StatusCode -ne [System.Net.HttpStatusCode]::OK) { if ($ClientResult.Result.StatusCode -ne [System.Net.HttpStatusCode]::Created) { write-Host ($ClientResult.Result) } if ($ClientResult.Result.Content -ne $null) { Write-Host ($ClientResult.Result.Content.ReadAsStringAsync().Result); } } if (!$ClientResult.Result.IsSuccessStatusCode) { Write-Host ("Error making REST Get " + $ClientResult.Result.StatusCode + " : " + $ClientResult.Result.ReasonPhrase) Write-Host ("RequestURL : " + $RequestURL) } else { if ($NoJSON) { return $ClientResult.Result.Content } else { $JsonObject = ExpandPayload($ClientResult.Result.Content.ReadAsStringAsync().Result) #$JsonObject = ConvertFrom-Json -InputObject $ClientResult.Result.Content.ReadAsStringAsync().Result if ([String]::IsNullOrEmpty($ClientResult)) { write-host "No Value returned" } else { if($JsonObject -ne $null){ Add-Member -InputObject $JsonObject -NotePropertyName DateTimeRESTOperation -NotePropertyValue (Get-Date).ToString("s") } return $JsonObject } } } } } |