AL/Download-AppPackage.ps1

function Download-AppPackage {
    param (
        [Parameter(Mandatory = $false)]
        [string]$Name,
        [Parameter(Mandatory = $false)]
        [string]$AppVersion,
        [Parameter(Mandatory = $false)]
        [int]$PlatformVersion = 0,
        [Parameter(Mandatory = $false)]
        [string]$LocalPath
    )
    
    if ($PlatformVersion -eq 0) {
        [version]$Platform = [Version]::Parse((Get-AppKeyValue -KeyName 'platform'))
        $PlatformVersion = $Platform.Major
    }

    $Path = "Business Central $PlatformVersion"

    if ([String]::IsNullOrEmpty($Name)) {
        $Name = Get-AppKeyValue -KeyName name
    }

    if ([String]::IsNullOrEmpty($AppVersion)) {
        $Pattern = $Name
    }
    else {
        $Pattern = "$Name_$AppVersion"
    }

    Write-Verbose "Using pattern $Pattern to find app in path $Path"

    $FileName = Get-ChildItemFTP $Path | Where-Object { $_ -match $Pattern }
    
    if ([String]::IsNullOrEmpty($FileName)) {
        $Path += '/Archive'
        $FileName = Get-ChildItemFTP $Path | Where-Object { $_ -match $Pattern }
    }

    if ([String]::IsNullOrEmpty($FileName)) {
        return $null
    }

    if ($FileName.Count -gt 1) {
        $FileName = $FileName.Item($FileName.Count - 1)
    }

    if ([String]::IsNullOrEmpty($LocalPath)) {
        $LocalPath = Join-Path -Path (Get-Location) -ChildPath '.alpackages'
    }

    Write-Host "Downloading $Path/$FileName to $LocalPath"

    Get-ItemFTP -FTPPath $Path -Name $FileName -LocalPath $LocalPath | Out-Null

    $VersionDownloaded = $FileName.Substring($FileName.LastIndexOf('_') + 1)
    $VersionDownloaded.Substring(0, $VersionDownloaded.LastIndexOf('.'))
}

Export-ModuleMember -Function Download-AppPackage