Public/Add-MessagesToOrg.ps1

<#
    .SYNOPSIS
    Posts message objects to a salesforce REST endpoint
 
    .DESCRIPTION
    Each message contains the endpoint and the body of the message to post.
    This commandlet uses Write-Progress to report activity
 
    .INPUTS
    Array of messages
 
    .OUTPUTS
    None
 
    .PARAMETER Messages
    An array of PSObjects that contain the following properties:
        - endpoint - the Salesforce API endpoint to call
        - body - PS object that represents the body to send to the endpoint. This object will be converted to JSON before post
 
    .EXAMPLE
    C:\PS> Add-MessageToOrg -Messages @([PSObject]@{ endpoint = "/services/apexrest/foo"; body = [PSObject]@{ value = "1" } })
 
    .LINK
    Set-FileConfig
 
    .NOTES
    Assumes config is initialized for org access.
#>

function Add-MessagesToOrg {
    param(
        [Parameter(ValueFromPipeline)]
        $Messages
    )

    $sfAuthenticate = Invoke-SfAuthenticate
    $headers = Get-SfHeaders $sfAuthenticate
    $headers."Content-Language" = "en-US"
    $headers."Version" = "1"
    $i = 0
    $messages | ForEach-Object {
        $apiEndPoint = "$($sfAuthenticate.instance_url)$($_.endpoint)"
        $sfAuthenticate = Invoke-SfAuthenticate
        $result = Invoke-RestMethod -Uri $apiEndPoint -Method Post -Headers $headers -Body ($_.body | ConvertTo-Json -Depth 100) -ContentType 'application/json; charset=utf-8' | ConvertFrom-Json
        if ($result.resultstatus.message -ne "Success") {
            Write-Warning "Failed to add message due to '$($result.resultstatus.message)'"
        }
        $i++
        Write-Progress -Activity "Add Messages" -PercentComplete (($i / $messages.Count)  * 100) -Status "Added: $i of $($messages.Count)"
    }
}