Containers/New-NavContainer2.ps1

function New-NavContainer2 {
    Param(
        [Parameter(Mandatory=$true)]
        [string]$ContainerName,
        [Parameter(Mandatory=$false)]
        [string]$ImageName,
        [Parameter(Mandatory=$false)]
        [PSCredential]$Credential,
        # Swtich to include CSide
        [Parameter(Mandatory=$false)]
        [switch]
        $includeCSide,
        # Optional additional parameters to use when creating the docker container
        [Parameter(Mandatory=$false)]
        [string[]]
        $AdditionalParams,
        [Parameter(Mandatory=$false)]
        [ValidateSet('Sandbox','OnPrem')]
        [string]$ContainerType = 'Sandbox',
        [Parameter(Mandatory=$false)]
        [string]$Version,
        [Parameter(Mandatory=$false)]
        [string]$Country = 'w1',
        [Parameter(Mandatory=$false)]
        [ValidateSet('bcartifacts','bcinsider')]
        [string]$StorageAccount = 'bcartifacts',
        [Parameter(Mandatory=$false)]
        [switch]$SecondToLastMajor,
        [Parameter(Mandatory=$false)]
        [string] $memoryLimit = "4G"
    )

    if ($null -eq $Credential) {
        $NewCredential = New-CredentialFromEnvironmentJson
        if ($NewCredential -eq $false) {
            $Credential = [PSCredential]::new('admin', (ConvertTo-SecureString 'P@ssword1' -AsPlainText -Force))
        }
        else {
            $Credential = $NewCredential
        }
    }

    if ($ImageName.Contains('nav')) {
        $LicenceFile = (Get-TFSConfigKeyValue 'navLicenceFile')
    }
    else {
        $LicenceFile = (Get-TFSConfigKeyValue 'businessCentralLicenceFile')
    }

    $Params = @{
        containerName = $ContainerName
        auth = 'NavUserPassword'
        licenseFile = $LicenceFile
        restart = 'no'
        shortcuts = 'None'
    }
    
    if (($null -eq $ImageName) -or ($null -ne $ContainerType)) {
        $ArtifactParams = @{
            ContainerType = $ContainerType
            StorageAccount = $StorageAccount
            Country = $Country
        }

        if ($null -ne $Version) {
            $ArtifactParams.Add('Version', $Version)
        }

        if ($SecondToLastMajor.IsPresent) {
            $ArtifactParams.Add('SecondToLastMajor', $true)
        }

        $ArtifactUrl = Get-ArtifactUrl @ArtifactParams
        Write-Host "Using artifact url $ArtifactUrl"
        $Params.Add('artifactUrl', $ArtifactUrl)
    }

    if ($null -ne $AdditionalParams) {
        $Params.Add('additionalParameters', $AdditionalParams)
    }

    if ($null -ne $ImageName) {
        $Params.Add('imageName', $ImageName)
    }

    New-NavContainer @Params `
        -accept_eula `
        -accept_outdated `
        -Credential $Credential `
        -doNotExportObjectsToText `
        -includeCSide:$includeCSide `
        -updateHosts `
        -alwaysPull `
        -includeTestToolkit `
        -includeTestLibrariesOnly `
        -enableTaskScheduler:$false `
        -isolation (Get-ContainerIsolation) `
        -memoryLimit $memoryLimit `
        -assignPremiumPlan
}

Export-ModuleMember -Function New-NavContainer2