Public/Import-MicrosoftApps.ps1
function Import-MicrosoftApps { Param ( [Parameter(Mandatory=$true)] [String] $ToVersion, [ValidateSet('Latest', 'First', 'All', 'Closest', 'SecondToLastMajor', 'Current', 'NextMinor', 'NextMajor')] [String] $Select = 'Latest', [Parameter(Mandatory=$true)] [string] $DestinationRootPath ) $configFile = Join-Path (Get-Location) "config.json" Get-UpgradeInitializationScriptConfig -configFile $configFile $ArtifactPaths = Get-PlatformArtifactsPath -version $ToVersion -select $Select $ToFullVersion = Get-ApplicationVersionFromArtifacts -version $ToVersion $fromVersion = $upgradeInitializationScriptConfig.FromBC.Version $majorVersion = [int]($fromVersion.Split('.')[0]) if ("14" -eq $majorVersion) { # Copy Symbols, Base, System and Application app file to MigrationFiles folder $SystemSymbolsAppFilePath = Get-SystemSymbolsAppPath -artifactPaths $ArtifactPaths CopyItem -sourceFile $SystemSymbolsAppFilePath -destinationFolder (Join-Path $DestinationRootPath "ExtensionsSourceCode\ls-upgrade-1st_version\.alpackages") CopyItem -sourceFile $SystemSymbolsAppFilePath -destinationFolder (Join-Path $DestinationRootPath "ExtensionsSourceCode\ls-upgrade-2nd_version-migration\.alpackages") CopyItem -sourceFile $SystemSymbolsAppFilePath -destinationFolder (Join-Path $DestinationRootPath "ExtensionsSourceCode\ls-upgrade-base-empty\.alpackages") CopyItem -sourceFile $SystemSymbolsAppFilePath -destinationFolder (Join-Path $DestinationRootPath "ExtensionsSourceCode\ls-upgrade-system-empty\.alpackages") CopyItem -sourceFile $SystemSymbolsAppFilePath -destinationFolder (Join-Path $DestinationRootPath "ExtensionsSourceCode\ls-upgrade-lscentral-empty\.alpackages") CopyItem -sourceFile $SystemSymbolsAppFilePath -destinationFolder (Join-Path $DestinationRootPath "ExtensionsSourceCode\ls-upgrade-lscentral_system_app-empty\.alpackages") foreach ($extension in $upgradeInitializationScriptConfig.CustomExtensions) { $appId = $extension.AppId $appPackageName = "ls-upgrade-custom-$($appId)-empty" CopyItem -sourceFile $SystemSymbolsAppFilePath -destinationFolder (Join-Path $DestinationRootPath "ExtensionsSourceCode\$($appPackageName)\.alpackages") } if (Test-Path -Path (Join-Path $DestinationRootPath "ExtensionsSourceCode\ls-upgrade-tables_renaming-1st_version-empty")) { CopyItem -sourceFile $SystemSymbolsAppFilePath -destinationFolder (Join-Path $DestinationRootPath "ExtensionsSourceCode\ls-upgrade-tables_renaming-1st_version-empty\.alpackages") CopyItem -sourceFile $SystemSymbolsAppFilePath -destinationFolder (Join-Path $DestinationRootPath "ExtensionsSourceCode\ls-upgrade-tables_renaming-2nd_version-old_tables_names\.alpackages") CopyItem -sourceFile $SystemSymbolsAppFilePath -destinationFolder (Join-Path $DestinationRootPath "ExtensionsSourceCode\ls-upgrade-tables_renaming-3rd_version-new_tables_names\.alpackages") CopyItem -sourceFile $SystemSymbolsAppFilePath -destinationFolder (Join-Path $DestinationRootPath "ExtensionsSourceCode\ls-upgrade-tables_renaming-4th_version-migration\.alpackages") } } # Copy Base, System and Application app file to MigrationFiles folder $BaseAppFilePath = Get-BaseAppPath -artifactPaths $ArtifactPaths CopyItem -sourceFile $BaseAppFilePath -destinationFolder (Join-Path $DestinationRootPath "MigrationFiles") -newFilename "Microsoft_Base Application_$($ToFullVersion).app" $SystemAppFilePath = Get-SystemAppPath -artifactPaths $ArtifactPaths CopyItem -sourceFile $SystemAppFilePath -destinationFolder (Join-Path $DestinationRootPath "MigrationFiles") -newFilename "Microsoft_System Application_$($ToFullVersion).app" $ApplicationAppFilePath = Get-ApplicationAppPath -artifactPaths $ArtifactPaths CopyItem -sourceFile $ApplicationAppFilePath -destinationFolder (Join-Path $DestinationRootPath "MigrationFiles") -newFilename "Microsoft_Application_$($ToFullVersion).app" Write-Host "Finished importing Microsoft apps files." } function Get-SystemSymbolsAppPath { Param ( [Parameter(Mandatory=$true)] [string[]] $ArtifactPaths ) $PlatformArtifactPath = $ArtifactPaths[1] $SystemAppFilePath = Join-Path $PlatformArtifactPath "ModernDev\program files\Microsoft Dynamics NAV\*\AL Development Environment\System.app" if (!(Test-Path $SystemAppFilePath)) { Write-Error "Couldn't find `"$((Get-Item $SystemAppFilePath).FullName)`"." } Write-Host "Found System.app symbols file in: `"$((Get-Item $SystemAppFilePath).FullName)`"" Write-Output $((Get-Item $SystemAppFilePath).FullName) } function Get-BaseAppPath { Param ( [Parameter(Mandatory=$true)] [string[]] $ArtifactPaths ) $PlatformArtifactPath = $ArtifactPaths[1] $BaseAppFilePath = Join-Path $PlatformArtifactPath "Applications\BaseApp\Source\Microsoft_Base Application.app" if (!(Test-Path $BaseAppFilePath)) { Write-Error "Couldn't find `"$($BaseAppFilePath)`"." } Write-Host "Found Microsoft Base Application.app file in: `"$($BaseAppFilePath)`"" Write-Output $BaseAppFilePath } function Get-SystemAppPath { Param ( [Parameter(Mandatory=$true)] [string[]] $ArtifactPaths ) $PlatformArtifactPath = $ArtifactPaths[1] $SystemAppFilePath = Join-Path $PlatformArtifactPath "Applications\system application\Source\Microsoft_System Application.app" if (!(Test-Path $SystemAppFilePath)) { Write-Error "Couldn't find `"$($SystemAppFilePath)`"." } Write-Host "Found Microsoft System Application.app file in: `"$($SystemAppFilePath)`"" Write-Output $SystemAppFilePath } function Get-ApplicationAppPath { Param ( [Parameter(Mandatory=$true)] [string[]] $ArtifactPaths ) $PlatformArtifactPath = $ArtifactPaths[1] $ApplicationAppFilePath = Join-Path $PlatformArtifactPath "Applications\Application\Source\Microsoft_Application.app" if (!(Test-Path $ApplicationAppFilePath)) { Write-Error "Couldn't find `"$($ApplicationAppFilePath)`"." } Write-Host "Found Microsoft Application.app file in: `"$($ApplicationAppFilePath)`"" Write-Output $applicationAppFilePath } function Get-PlatformArtifactsPath { Param ( [Parameter(Mandatory=$true)] [String] $Version, [ValidateSet('Latest', 'First', 'All', 'Closest', 'SecondToLastMajor', 'Current', 'NextMinor', 'NextMajor')] [String] $Select = 'Latest' ) $Type = 'OnPrem' $ArtifactUrl = Get-BCArtifactUrl -version $Version -country w1 -select $Select -type $Type $ArtifactPaths = Download-Artifacts -artifactUrl $ArtifactUrl -includePlatform Write-Output $ArtifactPaths } function CopyItem { Param ( [Parameter(Mandatory=$true)] [string] $SourceFile, [Parameter(Mandatory=$true)] [string] $DestinationFolder, [string] $NewFilename ) if (!(Test-Path $DestinationFolder)) { Write-Error "$($DestinationFolder) folder does not exists." } $DestinationPath = $DestinationFolder if ($NewFilename -ne "") { $DestinationPath = Join-Path $DestinationFolder $NewFilename } Copy-Item -Path $SourceFile $DestinationPath Write-Host "Copied file from $($SourceFile) to $($DestinationPath)." } Export-ModuleMember -Function Import-MicrosoftApps |