Patch/Cmdlets/NAV/Invoke-NAVDataUpgrade.ps1

<#
.SYNOPSIS
    Invoke the Microsoft Dynamics NAV data upgrade process and wait until it completes.
.DESCRIPTION
    Invoke NAV Data Upgrade process and wait until it completes.
    Detected errors are displayed.
.PARAMETER ServerInstance
    Specifies the Microsoft Dynamics NAV Server instance that is going to execute the Microsoft Dynamics NAV data upgrade process.
.PARAMETER Tenant
    Specifies the tenant to upgrade.
#>


function Invoke-NAVDataUpgrade
{
    [CmdletBinding()]
    param
    (
        [parameter(Mandatory=$true)]
        [string]$ServerInstance,
        [parameter(Mandatory=$true,ValueFromPipeline)]
        [string]$Tenant
    )
    PROCESS
    {
        $ProgressPreference = "SilentlyContinue"

        Start-NAVDataUpgrade -ServerInstance $ServerInstance -Tenant $Tenant `
            -ContinueOnError -SkipCompanyInitialization -FunctionExecutionMode Parallel `
            -SkipAppVersionCheck -SkipUserSessionCheck `
            -ErrorAction Stop -Force `

        # Wait for Upgrade Process to complete
        Get-NAVDataUpgrade -ServerInstance $ServerInstance -Tenant $Tenant -Progress

        # Make sure that Upgrade Process completed successfully.
        $errors = Get-NAVDataUpgrade -ServerInstance $ServerInstance -Tenant $Tenant -ErrorOnly

        if(!$errors)
        {
            # no errors detected - process has been completed successfully
            return;
        }

        # Stop the suspended process
        Stop-NAVDataUpgrade -ServerInstance $ServerInstance -Tenant $Tenant -Force

        $errorMessage = "Errors occurred during the Microsoft Dynamics NAV data upgrade process: " + [System.Environment]::NewLine
        foreach($nextErrorRecord in $errors)
        {
            $errorMessage += ("Codeunit ID: " + $nextErrorRecord.CodeunitId + ", Function: " + $nextErrorRecord.FunctionName + ", Error: " + $nextErrorRecord.Error + ", Company: " + $nextErrorRecord.CompanyName  +",Tenant: $Tenant" + [System.Environment]::NewLine)
        }

        Write-Error $errorMessage
    }
}

Export-ModuleMember -Function Invoke-NAVDataUpgrade