AL/Get-RuntimePackage.ps1

<#
 .Synopsis
  Retrieves the runtime packages for apps
 .Description
  Retrieves the runtime packages for the current app from a container and codesigns it, if required by the Business Central version. It also retrieves the Test app
 .Parameter ContainerName
  Name of the container that has the apps
 .Parameter SourceFolder
  Folder to current project
 .Parameter outputFolder
  Location the apps should be saved to
 .Parameter pfxFile
  Codesign certificate file
 .Parameter pfxPassword
  Password for the certificate
 .Parameter TestApp
  Add this switch to retrieve the test app for the project as well
 .Example
  $Get-RuntimePackage -outputFolder "C:\Install" -pfxFile "C:\PfxFile.pfx" -pfxPassword (ConvertTo-SecureString "P@ssword1" -AsPlainText -Force) -TestApp
#>

function Get-RuntimePackage {
    param (
        [Parameter(Mandatory = $false)]
        [string] $ContainerName,
        [Parameter(Mandatory = $false)]
        [string] $SourceFolder = (Get-Location),
        [Parameter(Mandatory = $true)]
        [string] $outputFolder,
        [Parameter(Mandatory = $true)]
        [securestring] $pfxFile,
        [Parameter(Mandatory = $true)]
        [securestring] $pfxPassword,
        [switch] $TestApp
    )

    $ContainerName = Get-NewContainerName -SourcePath $SourceFolder -ContainerName $ContainerName

    if (!(Test-Path $outputFolder)) {
        New-EmptyDirectory $outputFolder
    }

    $appJson = (Get-Content (Join-Path $SourceFolder 'app.json') -Raw | ConvertFrom-Json)
    $localPath = Join-Path $outputFolder ($appJson.Publisher + "_" + $appJson.Name + "_" + $appJson.Version + "_Runtime.app")
    $appFile = Get-BcContainerAppRuntimePackage -containerName $ContainerName -appName $appJson.name
    Copy-FileFromBcContainer -containerName $ContainerName -containerPath $appFile -localPath $localPath

    [version]$BCFallPlatform = '15.0.0.0'
    [version]$platform = Get-AppKeyValue -SourcePath $SourceFolder -KeyName 'platform'
    if ($platform -ge $BCFallPlatform) {
        Invoke-SignFile -containerName $ContainerName -FileName $localPath -pfxFile $pfxFile -pfxPassword $pfxPassword
    }

    if ($TestApp.IsPresent) {
        $localPath = Join-Path $outputFolder ($appJson.Publisher + "_" + $appJson.Name + " Tests_" + $appJson.Version + "_Runtime.app")
        $appFile = Get-BcContainerAppRuntimePackage $ContainerName -appName "$($appJson.name + ' Tests')"
        Copy-FileFromBcContainer -containerName $ContainerName -containerPath $appFile -localPath $localPath

        if ($platform -ge $BCFallPlatform) {
            Invoke-SignFile -containerName $ContainerName -FileName $localPath -pfxFile $pfxFile -pfxPassword $pfxPassword
        }
    }
}
Export-ModuleMember Get-RuntimePackage