internal/functions/Get-UdePackageModelName.ps1


<#
    .SYNOPSIS
        Get the model name from a UDE package name.
         
    .DESCRIPTION
        Derives the Finance and Operations model name from an
        msprov_fnopackage name.
         
        Delete packages use the pattern Model_Delete_*.
        Full packages typically end with _1_0_0_1_managed.zip.
         
    .PARAMETER PackageName
        The msprov_name value from the package row.
         
    .EXAMPLE
        PS C:\> Get-UdePackageModelName -PackageName "ESIntegrationFramework_1_0_0_1_managed.zip"
         
        This will return ESIntegrationFramework.
         
    .EXAMPLE
        PS C:\> Get-UdePackageModelName -PackageName "ESIntegrationFramework_Delete_20260907095029_81ba79b5"
         
        This will return ESIntegrationFramework.
         
    .NOTES
        Author: Mötz Jensen (@Splaxi)
#>

function Get-UdePackageModelName {
    [CmdletBinding()]
    [OutputType([string])]
    param (
        [Parameter(Mandatory = $true)]
        [AllowEmptyString()]
        [string] $PackageName
    )

    if ([System.String]::IsNullOrWhiteSpace($PackageName)) { return }

    if ($PackageName -match '^(?<model>.+)_Delete_') {
        return $Matches['model']
    }

    if ($PackageName.EndsWith('_1_0_0_1_managed.zip')) {
        return $PackageName.Substring(0, $PackageName.Length - '_1_0_0_1_managed.zip'.Length)
    }

    if ($PackageName.EndsWith('.zip')) {
        return [System.IO.Path]::GetFileNameWithoutExtension($PackageName)
    }

    $PackageName
}