Public/New-CollectionGroupLink.ps1

<#
.SYNOPSIS
    Gets collection group links from the Fortytwo Collections API.

.DESCRIPTION
    This function retrieves collections from the Fortytwo Collections API. It supports pagination to handle large result sets.

#>

function New-CollectionGroupLink {
    [CmdletBinding(DefaultParameterSetName = "Default")]
    param (
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [ValidatePattern("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", ErrorMessage = "Id must be a valid GUID.")] # Is a guid connector object id
        [string] $CollectionId,
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [ValidatePattern("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", ErrorMessage = "Id must be a valid GUID.")] # Is a guid connector object id
        [string] $EntraIDGroupObjectId
    )

    process {
        if (-not $Script:APIRoot -or -not $Script:AccessTokenProfile) {
            throw "Not connected to Fortytwo Collections. Please run Connect-Collections first."
        }

        $Uri =  "$Script:APIRoot" -f "group-link", "/group-links"

        Write-Verbose "Request URI: $Uri"

        $body = @{
            collectionId = $CollectionId
            entraGroupId = $EntraIDGroupObjectId
        } | ConvertTo-Json

        $result = Invoke-RestMethod -Uri $Uri -Headers (Get-CollectionHeader) -Method POST -Body $body -ContentType "application/json" 
        if ($result.isSuccess) {
            Write-Verbose "Successfully created collection group link with CollectionId: $CollectionId and EntraIDGroupObjectId: $EntraIDGroupObjectId"
        }
    }
}