internal/functions/new-webrequestbatch.ps1

function New-WebRequestBatch ($D365FO, $RequestUrl, $AuthorizationHeader, $Action, $Payloads) {

    Write-Verbose "New Request $D365FO/$RequestUrl, $Action"        


    $idbatch = New-Guid
    $idbatch = $idbatch.ToString()
    $idchangeset = New-Guid
    $idchangeset = $idchangeset.ToString()
    $batchPayload = "--batch_$idbatch"
    $changesetPayload = "--changeset_$idchangeset"

    Write-Verbose "Batch $idBatch"
    Write-Verbose "Changeset $idchangeset"

    $authHeader = $authorizationHeader.CreateAuthorizationHeader()

    $request = [System.Net.WebRequest]::Create("$D365FO/$requestUrl")
    $request.Headers["Authorization"] = $authHeader
    $request.Method = $action
    $request.ContentType = "multipart/mixed; boundary=batch_$idBatch"

    $data = "--$batchPayLoad `r`n"
    $data += "Content-Type: multipart/mixed; boundary=changeset_$idchangeset `r`n`r`n"
    $data += "$changeSetPayLoad `r`n"

    if ($PayLoads.Count % 2 -eq 1 ) { throw "PayLoad is not divideable with 2"}

    $payLoadEnumerator = $Payloads.GetEnumerator()
    $counter = 0
    while ($payLoadEnumerator.movenext()) { 
        

        $counter ++
        $entity = $payLoadEnumerator.Current
        $null = $payLoadEnumerator.movenext()
        $entityFile = $payLoadEnumerator.Current
        $payload = Get-Content -Path $entityFile
        $payload = $payload.Trim()
        $data += New-BatchContent $counter "$D365FO/$entity" $authHeader  $payload
        if ($PayLoads.Count -eq ($counter * 2)) {
            $data += "$changesetPayload--`r`n"
        }
        else {
            $data += "$changesetPayload`r`n"    
        }
    }
    
    
    $data += "$batchPayload--"

    write-verbose $data
    $request.ContentLength = $data.Length

    $stream = $request.GetRequestStream()
    $streamWriter = new-object System.IO.StreamWriter($stream)
    $streamWriter.Write([string]$data);
    $streamWriter.Flush();
    
    $request

}