Private/Get-InstallerType.ps1

function Get-InstallerType {
    [OutputType([System.String])]
    [CmdletBinding(SupportsShouldProcess = $false)]
    param (
        [Parameter(Mandatory = $true, Position = 0)]
        [System.String] $String
    )

    $Tokens = @($String -csplit '(?<=[a-z0-9])(?=[A-Z])|[^A-Za-z0-9]+')
    $Terms = @(
        for ($Index = 0; $Index -lt $Tokens.Count; $Index++) {
            $Tokens[$Index].ToLowerInvariant()
            if ($Index -lt ($Tokens.Count - 1)) {
                "$($Tokens[$Index])$($Tokens[$Index + 1])".ToLowerInvariant()
            }
        }
    )

    $InstallerTypes = [ordered] @{
        noadmin      = "NoAdmin"
        admin        = "Admin"
        airgap       = "Airgap"
        classic      = "Classic"
        debug        = "Debug"
        grouppolicy  = "GroupPolicy"
        legacy       = "Legacy"
        light        = "Light"
        minimalist   = "Minimal"
        ndm          = "NonDarkMode"
        noinstaller  = "Portable"
        portable     = "Portable"
        plus         = "Plus"
        premium      = "Premium"
        standalone   = "Standalone"
        qt5          = "Qt5"
        qt6          = "Qt6"
        user         = "User"
        winmsi       = "MSI"
    }

    $Type = "Default"
    foreach ($InstallerType in $InstallerTypes.Keys) {
        if ($Terms -contains $InstallerType) {
            $Type = $InstallerTypes[$InstallerType]
            break
        }
    }

    if ($Type -eq "Default") {
        Write-Verbose -Message "$($MyInvocation.MyCommand): Installer type not found in $String, defaulting to 'Default'."
    }
    Write-Output -InputObject $Type
}