functions/invoke-psnhttpendpoint.ps1

<#
.SYNOPSIS
Invoke a HTTP Endpoint
 
.DESCRIPTION
Invoke a HTTP Endpoint and send a payload along
 
.PARAMETER Url
The URL endpoint that is capable of handling your request
 
The URL parameter has a default value if you have configured one with the designated functions
 
.PARAMETER Payload
The raw (string) payload that you want to pass along to the HTTP Endpoint
 
.PARAMETER Type
Type parameter to instruct the HTTP Endpoint what kind of data that will be part of the request
 
.EXAMPLE
$hashTable = @{email = "admin@domain.com"; subject = "More testing"; message = "I hope this finds you well"}
$payload = ($hashTable | ConvertTo-Json)
 
Invoke-PSNHttpEndpoint -Payload $payload -Url "https://prod-35.westeurope.logic.azure.com:443/workflows/14adfasdrae23354432636dsfasfdsaf/"
 
This will invoke the HTTP endpoint and send along a payload. The payload comes from the HashTable that is converted into a Json object.
 
.NOTES
 
Author: Mötz Jensen (@Splaxi)
 
#>

function Invoke-PSNHttpEndpoint {
    [CmdletBinding()]
    param (
        [string] $Url = $Script:Url,

        [Parameter(Mandatory = $True)]
        [string] $Payload,

        [ValidateSet('Json')]
        [string] $Type = "Json"
    )
    
    begin {
    }
    
    process {        
        Write-PSFMessage -Level Verbose -Message "Prepping the details for executing the HTTP request."

        [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
        $request = [System.Net.WebRequest]::Create($Url)
        $request.Method = "POST"
        $request.ContentType = "application/$($Type.ToLower())";

        try {
            $stream = new-object System.IO.StreamWriter ($request.GetRequestStream())
            $stream.write($Payload)
            $stream.Flush()
            $stream.Close()

            Write-PSFMessage -Level Verbose -Message "Executing the HTTP request."
            $response = $request.GetResponse()
    
            $requestStream = $response.GetResponseStream()
            $readStream = New-Object System.IO.StreamReader $requestStream
            $data = $readStream.ReadToEnd()    
        }
        catch {
            Write-PSFMessage -Level Verbose -Message "Something went wrong while contacting the http endpoint." -ErrorRecord $_
        }
        
        $data
    }
    
    end {
    }
}