ContainerHandling/Get-BestNavContainerImageName.ps1

<#
 .Synopsis
  Get Best NAV/BC Container Image Name
 .Description
  If a Container Os platform name is not specified in the imageName, find the best container os and add it (if his is a microsoft image)
 .Parameter imageName
  Name of image
 .Example
  $imageName = Get-BestNavContainerImageName -imageName $imageName
#>

function Get-BestNavContainerImageName {
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory=$true, ValueFromPipeline)]
        [string] $imageName
    )

    if (!(
          $imagename.EndsWith('-ltsc2016') -or
          $imagename.EndsWith('-1709') -or
          $imagename.EndsWith('-1803') -or
          $imagename.EndsWith('-ltsc2019') -or
          $imagename.EndsWith('-1903') -or
          $imagename.EndsWith('-1909') -or
          $imagename.EndsWith('-2004') -or
          $imagename.EndsWith(':ltsc2016') -or
          $imagename.EndsWith(':1709') -or
          $imagename.EndsWith(':1803') -or
          $imagename.EndsWith(':ltsc2019') -or
          $imagename.EndsWith(':1903') -or
          $imagename.EndsWith(':1909') -or
          $imagename.EndsWith(':2004')
    )) {

        if ($imagename.StartsWith('microsoft/') -or 
            $imagename.StartsWith('bcprivate.azurecr.io/') -or 
            $imagename.StartsWith('bcinsider.azurecr.io/') -or 
            $imagename.StartsWith('mcr.microsoft.com/') -or 
            $imagename.StartsWith('mcrbusinesscentral.azurecr.io/')) {

            $os = (Get-CimInstance Win32_OperatingSystem)
            if ($os.OSType -eq 18 -and $os.Version.StartsWith("10.0.")) {
                $bestContainerOs = "ltsc2016"
                if ($os.BuildNumber -ge 17763) { 
                    $bestContainerOs = "ltsc2019"
                }

                if (!$imageName.Contains(':')) {
                    $imageName += ":$bestContainerOs"
                } else {
                    $imageName += "-$bestContainerOs"
                }
            }
        }
    }
    
    $imageName
}
Set-Alias -Name Get-BestBCContainerImageName -Value Get-BestNavContainerImageName
Export-ModuleMember -Function Get-BestNavContainerImageName -Alias Get-BestBCContainerImageName