Private/Resolve-AccessPackageContext.ps1

function Resolve-AccessPackageContext {
    <#
    .SYNOPSIS
        Validates an Access Package + Assignment Policy pair and returns their
        display names, or writes an error and returns $null if either lookup fails.
    .NOTES
        Internal helper, used by Add-/Remove-SiSAccessPackageAssignment.
    #>


    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string]$AccessPackageId,

        [Parameter(Mandatory = $true)]
        [string]$AssignmentPolicyId
    )

    Write-Host "`n--- ACCESS PACKAGE ---" -ForegroundColor Cyan
    try {
        $accessPackageResponse = Invoke-MgGraphRequest -Method GET `
            -Uri "https://graph.microsoft.com/v1.0/identityGovernance/entitlementManagement/accessPackages/$AccessPackageId" `
            -ErrorAction Stop

        $accessPackageName = $accessPackageResponse['displayName']
        if (-not $accessPackageName) {
            Write-Error -Message "Access package $AccessPackageId was found, but its displayName could not be read." -Category InvalidData -TargetObject $AccessPackageId
            return $null
        }
        Write-Host "Access Package : $accessPackageName" -ForegroundColor Green
    }
    catch {
        Write-Error -Message "Access package $AccessPackageId not found - check the id and your permissions. $($_.Exception.Message)" -Category ObjectNotFound -TargetObject $AccessPackageId
        return $null
    }

    Write-Host "`n--- ASSIGNMENT POLICY ---" -ForegroundColor Cyan
    try {
        $policyResponse = Invoke-MgGraphRequest -Method GET `
            -Uri "https://graph.microsoft.com/v1.0/identityGovernance/entitlementManagement/assignmentPolicies/$AssignmentPolicyId" `
            -ErrorAction Stop

        $policyName = $policyResponse['displayName']
        if (-not $policyName) {
            Write-Error -Message "Assignment policy $AssignmentPolicyId was found, but its displayName could not be read." -Category InvalidData -TargetObject $AssignmentPolicyId
            return $null
        }
        Write-Host "Assignment Policy : $policyName" -ForegroundColor Green
    }
    catch {
        Write-Error -Message "Assignment policy $AssignmentPolicyId not found - check the id and your permissions. $($_.Exception.Message)" -Category ObjectNotFound -TargetObject $AssignmentPolicyId
        return $null
    }

    return [PSCustomObject]@{
        AccessPackageName    = $accessPackageName
        AssignmentPolicyName = $policyName
    }
}