Complete Example
Warning
This example is somewhat out-dated and will be replaced soon, but can be useful to some degree.
param(
$IdPrefix = 'my-app',
$NamePrefix = 'My App',
$VersionPrefix = 'MyApp',
$Version = '1.0',
$LsNavVersion = '11.04',
$SetupDir = (Join-Path $PSScriptRoot 'v1.0'),
$OutputDir = (Join-Path $PSScriptRoot 'Output'),
$Subscription = 'aa6f87dc-dcc2-4915-b037-1853b31f1d9b',
$SourceServer = 'gocurrent.lsretail.com',
$Server = 'localhost',
$Port = $null
)
$ErrorActionPreference = 'stop'
Import-Module LsPackageTools\DatabasePackageCreator
Import-Module LsPackageTools\AddinPackageCreator
Import-Module LsPackageTools\LicensePackageCreator
Import-Module LSPackageTools\ObjectPackageCreator
Import-Module UpdateServiceServer
function Get-SqlInstance()
{
Import-Module UpdateService
$System = Get-UscInstalledPackage -Id 'system'
$System.Arguments.SqlServerInstance
}
$Packages = @(
@{ Id = 'ls-central-demo-database'; Version = $LsNavVersion }
@{ Id = 'ls-central-web-pos-addin'; Version = $LsNavVersion }
@{ Id = 'ls-central-toolbox-client'; Version = $LsNavVersion }
@{ Id = 'ls-central-objects'; Version = $LsNavVersion }
@{ Id = 'ls-hardware-station'; Version = $LsNavVersion }
)
$Packages | Copy-UssPackageFromServer -SourceServer $SourceServer
# Get BC version for LS Central
$BcPackage = Resolve-UssDependencies -Id 'ls-central-toolbox-server' -Version $LsNavVersion -Server $Server -Port $Port | Where-Object { $_.Id -eq 'bc-server'}
$BcVersion = $BcPackage.Version
Write-Host 'Creating new database package...'
$Arguments = @{
Id = "$IdPrefix-database"
Name = "$NamePrefix Database"
Version = $Version
OutputDir = $OutputDir
Path = (Join-Path $SetupDir '*.bak')
AllowOverwriteOnUpdate = $false
BcVersion = $BcVersion
Force = $true
}
New-DatabasePackage @Arguments | Import-UssPackage -Server $Server -Port $Port
$Arguments = @{
Id = "$IdPrefix-dotnet-server-addin"
Name = "$NamePrefix .Net Addin"
Version = $Version
InputPath = (Join-Path $SetupDir 'Addin\*')
OutputDir = $OutputDir
MinBcVersion = '8.0'
InstallInServer = $true
AddinDestinationDir = $VersionPrefix
}
Write-Host "Creating new addin package for server..."
New-AddinPackage @Arguments -Force | Import-UssPackage -Server $Server -Port $Port
$Arguments.Id = "$IdPrefix-dotnet-client-addin"
$Arguments.InstallInServer = $false
$Arguments.InstallInWindowsClient = $true
Write-Host "Creating new addin package for Windows client..."
New-AddinPackage @Arguments -Force | Import-UssPackage -Server $Server -Port $Port
$Arguments = @{
Id = "$IdPrefix-license"
Name = "$NamePrefix License"
Version = $Version
LicensePath = (Join-Path $SetupDir '*.flf')
OutputDir = $OutputDir
}
if (Resolve-Path $Arguments.LicensePath -ErrorAction SilentlyContinue)
{
Write-Host "Creating license package..."
New-LicensePackage @Arguments -Force | Import-UssPackage -Server $Server -Port $Port
}
else
{
try
{
Get-UssPackageVersion -Id $Arguments.Id -VersionQuery '' -Server $Server -Port $Port
}
catch
{
throw "You must provide a valid Dynamics 365 Business Central license for a successfull upgrade, put your license file into $SetupDir."
}
}
$Dependencies = @(
@{ Id = 'bc-objects'; Version = "=$BcVersion"}
@{ Id = 'ls-central-objects'; Version = "$LsNavVersion"}
)
$FobPath = Join-Path $OutputDir "$VersionPrefix.fob"
$Arguments = @{
VersionPrefix = $VersionPrefix
OutputFobPath = $FobPath
Dependencies = $Dependencies
DatabaseBackupPath = (Join-Path $SetupDir '*.bak')
DatabaseServerInstance = Get-SqlInstance
}
Write-Host "Exporting objects from database backup..."
Export-ObjectsForPackage @Arguments -Force
$Arguments = @{
Id = "$IdPrefix-objects"
Name = "$NamePrefix Objects"
Version = $Version
FobPath = $FobPath
ForceDestructiveChanges = $true
Dependencies = $Dependencies
VersionPrefix = $VersionPrefix
OutputDir = $OutputDir
}
Write-Host "Creating new object package..."
New-ObjectPackage @Arguments -Force | Import-UssPackage -Server $Server -Port $Port
# Create subscription package
$Arguments = @{
Id = "bundle/$IdPrefix-full"
Version = $Version
Name = "$NamePrefix Full Install"
DisplayName = "$NamePrefix Full Install $Version"
Instance = $true
Dependencies = @(
# The database package must be placed before bc-server package or his depentant.
@{ Id = "$IdPrefix-database"; Version = $Version}
@{ Id = "$IdPrefix-dotnet-server-addin"; Version = ">=$Version"}
# Skip this package if you do not want the Windows Client:
@{ Id = "$IdPrefix-dotnet-client-addin"; Version = ">=$Version"}
@{ Id = "$IdPrefix-objects"; Version = $Version}
# We always want the newest license:
@{ Id = "$IdPrefix-license"; Version = '!^'}
# Skip this package if you do not want the Web Client
@{ Id = "bc-web-client"; Version = $BcVersion}
)
AlwaysUpdateDependencies = $true
OutputDir = $OutputDir
}
New-UssPackage @Arguments -Force | Import-UssPackage -Server $Server -Port $Port
if (!(Test-UssInstaller -Subscription $Subscription -Server $Server -Port $Port))
{
Write-Host "Creating subscription..."
New-UssInstaller -Subscription $Subscription -Name "$NamePrefix Setup" -Server $Server -Port $Port
}
$Arguments = @{
Subscription = $Subscription
Id = "bundle/$IdPrefix-full"
Version = $Version
UpdateStrategy = 'Automatic'
InstanceNameSuggestion = $IdPrefix
Server = $Server
Port = $Port
}
Write-Host "Updating subscription..."
Set-UssInstallerPackage @Arguments
Write-Host "Fetching installer for subscription..."
$InstallerPath = Get-UssInstaller -Subscription $Subscription -OutputDir $OutputDir
Write-Host "Its all done!"
Write-Host ''
Write-Host "Now lets install your setup:"
Write-Host " - Using installer: $InstallerPath"
Write-Host " - Using PS: Install-UscPackage -Id 'bundle/$IdPrefix-full'"