Private/Get-Body.ps1

function Get-Body {
<#
.SYNOPSIS
    Outputs a Json string from input
.PARAMETER ENDPOINT
    RiskIQ endpoint
.PARAMETER DYNAMIC
    A runtime parameter dictionary to search for input values
#>

    [CmdletBinding()]
    [OutputType()]
    param(
        [Parameter(
            Mandatory = $true,
            Position = 1)]
        [object] $Endpoint,

        [Parameter(
            Mandatory = $true,
            Position = 2)]
        [System.Collections.ArrayList] $Dynamic
    )
    process {
        foreach ($Item in ($Dynamic.Values | Where-Object IsSet)) {
            # Match input parameter with endpoint
            $Param = $Endpoint.Parameters | Where-Object Dynamic -eq $Item.Name

            if ($Param.In -match 'body') {
                if ($Param.Name -eq 'body') {
                    # Capture filename for debug output
                    $Filename = $Item.Value

                    if ($PSVersionTable.PSVersion.Major -ge 6) {
                        # Convert to bytes and upload in PowerShell 6+
                        $ByteOutput = Get-Content $Item.Value -AsByteStream
                    } else {
                        # Convert to bytes and upload in PowerShell 5.1
                        $ByteOutput = Get-Content $Item.Value -Encoding Byte -Raw
                    }
                } else {
                    if (-not($BodyOutput)) {
                        # Create output object
                        $BodyOutput = @{ }
                    }
                    if ($Param.Parent) {
                        if (-not($Parents)) {
                            # Create object to contain 'parents'
                            $Parents = @{ }
                        }
                        if (-not($Parents.($Param.Parent))) {
                            # Add table to parents
                            $Parents[$Param.Parent] = @{ }
                        }
                        # Add input to parent object
                        $Parents.($Param.Parent)[$Param.Name] = $Item.Value
                    } else {
                        # Add input to body output
                        $BodyOutput[$Param.Name] = $Item.Value
                    }
                }
            }
        }
        if ($Parents) {
            foreach ($Key in $Parents.Keys) {
                # Add value arrays with parents to body output
                $BodyOutput[$Key] = @( $Parents.$Key )
            }
        }
        if ($BodyOutput) {
            # Output body value
            $BodyOutput
        } elseif ($ByteOutput) {
            Write-Debug "[$($MyInvocation.MyCommand.Name)] File: $Filename"

            # Output file content
            $ByteOutput
        }
    }
}