Public/Complete-ConnectorSyncSessionOperation.ps1

<#
.SYNOPSIS
    Executes a connector sync session operation against the Connector Data API.

.DESCRIPTION
    Sends a Create, Update, or Delete request to the Connector Data API for a given operation
    produced by Build-ConnectorOperation or Get-ConnectorSyncSessionOperation. Supports -WhatIf
    and -Confirm via ShouldProcess.

.PARAMETER Operation
    A connector operation hashtable as produced by Build-ConnectorOperation. Must contain
    OperationType (Create/Update/Delete), ConnectorObject, and Id (for Update/Delete).

.EXAMPLE
    Get-ConnectorSyncSessionOperation | Complete-ConnectorSyncSessionOperation

.EXAMPLE
    $op = Build-ConnectorOperation -OperationType Create -ConnectorObject $obj
    Complete-ConnectorSyncSessionOperation -Operation $op

.EXAMPLE
    Get-ConnectorSyncSessionOperation | Complete-ConnectorSyncSessionOperation -WhatIf
#>

function Complete-ConnectorSyncSessionOperation {
    [CmdletBinding(SupportsShouldProcess = $true)]
    param (
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $Operation
    )

    process {
        if ($PSCmdlet.ShouldProcess($Operation.Id ?? "New object", $Operation.OperationType)) {
            if ($Operation.OperationType -eq "Create") {
                Invoke-RestMethod `
                    -Uri "$($Script:APIRoot)data" `
                    -Method Post `
                    -ContentType "application/json" `
                    -Body ($Operation.ConnectorObject | ConvertTo-Json -Depth 30) `
                    -Headers (Get-EntraIDAccessTokenHeader -Profile $Script:AccessTokenProfile) | out-null
            }
            elseif ($Operation.OperationType -eq "Update") {
                Invoke-RestMethod `
                    -Uri "$($Script:APIRoot)data/$($Operation.Id)" `
                    -Method Put `
                    -ContentType "application/json" `
                    -Body ($Operation.ConnectorObject | ConvertTo-Json -Depth 30) `
                    -Headers (Get-EntraIDAccessTokenHeader -Profile $Script:AccessTokenProfile) | out-null
            }
            elseif ($Operation.OperationType -eq "Delete") {
                Invoke-RestMethod `
                    -Uri "$($Script:APIRoot)data/$($Operation.Id)" `
                    -Method Delete `
                    -Headers (Get-EntraIDAccessTokenHeader -Profile $Script:AccessTokenProfile) | out-null
            }
            else {
                throw "Unsupported operation type: '$($Operation.OperationType)'"
            }
        }
    }
}