internal/functions/resolve/Resolve-CustomSecurityAttributeDefinition.ps1

function Resolve-CustomSecurityAttributeDefinition
{
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory = $true)]
        [string] $InputReference,
        [switch] $DontFailIfNotExisting,
        [switch] $SearchInDesiredConfiguration,
        [switch] $Expand, # Return object { id, displayName }
        [switch] $DisplayName,
        [System.Management.Automation.PSCmdlet]
        $Cmdlet = $PSCmdlet
    )
    
    begin {
        $InputReference = Resolve-String -Text $InputReference
    }
    process
    {            
        $detail = $null; $id = $null
        try { $detail = Invoke-MgGraphRequest -Method GET -Uri ("$script:graphBaseUrl/directory/customSecurityAttributeDefinitions/{0}?`$select=id,displayName" -f $InputReference); $id = $detail.id } catch { $id=$null }
        if (-not $id -and $SearchInDesiredConfiguration) { if ($InputReference -in $script:desiredConfiguration['customSecurityAttributeDefinitions'].displayName) { $id = $InputReference } }
        if (-not $id) { if ($DontFailIfNotExisting) { return $InputReference } else { Write-PSFMessage -Level Warning -Message ("Cannot resolve customSecurityAttributeDefinition resource for input '{0}'. Searched tenant & desired configuration." -f $InputReference) -Tag failed; $Cmdlet.ThrowTerminatingError($_) } }
        if (-not $Expand) { if ($DisplayName) { return $detail.displayName } return $id }
        return [pscustomobject]@{ id=$id; displayName=$detail.displayName }
    }
}