Public/Add-OpmAssignment.ps1

<#
.SYNOPSIS
  Add an Intune (Microsoft Entra) group assignment to a PacKit fragment.
 
.DESCRIPTION
  Appends an assignment to the fragment's IntuneAssignments collection. The
  -MsEntraGroupId is the Entra group object id. -AssignmentType is typically
  'Required', 'Available' or 'Uninstall'; -InclusionType is 'included' or
  'excluded'. The fragment is modified in place.
 
.EXAMPLE
  Add-OpmAssignment -Fragment $app -MsEntraGroupId '{2C3D...}' -AssignmentType 'Required' -InclusionType 'included'
#>

function Add-OpmAssignment {
    [CmdletBinding()]
    [OutputType('PacKit.Assignment')]
    param(
        [Parameter(Mandatory, ValueFromPipeline)]
        [psobject] $Fragment,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string] $MsEntraGroupId,

        [Parameter()] [string] $AssignmentType = '',
        [Parameter()] [ValidateSet('', 'included', 'excluded')] [string] $InclusionType = '',

        [Parameter()] [switch] $PassThru
    )

    process {
        $parsed = [guid]::Empty
        if (-not [guid]::TryParse($MsEntraGroupId, [ref] $parsed)) {
            throw "MsEntraGroupId '$MsEntraGroupId' is not a valid GUID. Entra group ids are GUIDs; provide one like {2C3D4E5F-6071-8293-A4B5-C6D7E8F90011}."
        }

        $asg = New-OpmAssignmentObject
        $asg.MsEntraGroupId = $parsed.ToString('B').ToUpperInvariant()
        $asg.AssignmentType = $AssignmentType
        $asg.InclusionType = $InclusionType

        $Fragment.IntuneAssignments = @($Fragment.IntuneAssignments) + $asg

        if ($PassThru) { return $asg }
    }
}