AppHandling/Clean-BcContainerDatabase.ps1
<#
.Synopsis Cleans the Database in a BC Container .Description This function will remove existing base app from the database in a container, leaving the container without app You will have to publish a new base app before Business Central is useful .Parameter containerName Name of the container in which you want to clean the database .Example Clean-BcContainerDatabase -containerName test #> function Clean-BcContainerDatabase { Param( [string] $containerName = "navserver" ) $platform = Get-NavContainerPlatformversion -containerOrImageName $containerName if ("$platform" -eq "") { $platform = (Get-NavContainerNavVersion -containerOrImageName $containerName).Split('-')[0] } [System.Version]$platformversion = $platform if ($platformversion.Major -lt 14) { throw "Container $containerName does not support the function Clean-NavContainerDatabase" } Add-Type -AssemblyName System.Net.Http $customconfig = Get-NavContainerServerConfiguration -ContainerName $containerName if ($customConfig.Multitenant -eq "True") { throw "This script doesn't support multitenancy" } Invoke-ScriptInNavContainer -containerName $containerName -scriptblock { Param ( $customConfig, $platformversion ) if (!(Test-Path "c:\run\my\license.flf")) { throw "Container must be started with a developer license in order to publish a new application" } Write-Host "Uninstalling apps" Get-NAVAppInfo $customConfig.ServerInstance | Where-Object { $_.Name -ne "System Application" } | Uninstall-NAVApp -DoNotSaveData -WarningAction Ignore -Force if ($customConfig.databaseInstance) { $databaseServerInstance = "$($customConfig.databaseServer)\$($customConfig.databaseInstance)" } else { $databaseServerInstance = $customConfig.databaseServer } if ($platformversion.Major -eq 14) { Write-Host "Removing C/AL Application Objects" Delete-NAVApplicationObject -DatabaseName $customConfig.databaseName -DatabaseServer $databaseServerInstance -Filter 'ID=1..1999999999' -SynchronizeSchemaChanges Force -Confirm:$false } else { # Run 3 times to remove dependent apps first Write-Host "Unpublishing apps" Get-NAVAppInfo $customConfig.ServerInstance | Where-Object { $_.Name -ne "System Application" } | Unpublish-NAVApp -WarningAction Ignore -ErrorAction Ignore Get-NAVAppInfo $customConfig.ServerInstance | Where-Object { $_.Name -ne "System Application" } | Unpublish-NAVApp -WarningAction Ignore -ErrorAction Ignore Get-NAVAppInfo $customConfig.ServerInstance | Where-Object { $_.Name -ne "System Application" } | Unpublish-NAVApp -WarningAction Ignore } } -argumentList $customConfig, $platformversion } Export-ModuleMember -Function Clean-BcContainerDatabase |