functions/certificates/Update-NavServerCertificate.ps1

function Update-NavServerCertificate {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true)]
        [string]$ServerInstance,

        [Parameter(Mandatory=$true)]
        [string]$Thumbprint,

        [switch]$SkipRestart,

        [switch]$Force
    )
    
    begin {
        $currentThumbprint = Get-NavServicesCertificateThumbprint -ServerInstance $ServerInstance
        if ($currentThumbprint) {
            $currentFriendlyName = Get-CertificateFriendlyName -Thumbprint $currentThumbprint
        }
        $newFriendlyName = Get-CertificateFriendlyName -Thumbprint $Thumbprint
    }
    
    process {
        if ($currentFriendlyName -ne $newFriendlyName) {
            if (-not $Force) {
                Write-Error "New certificate $($Thumbprint) FriendlyName '$($newFriendlyName)' does not match $($currentThumbprint) FriendlyName '$($currentFriendlyName)'! Use -Force to to skip this check."
                return $false
            } else {
                Write-Warning "Forcing update of server instance $($ServerInstance) to use $($Thumbprint) ($($newFriendlyName)). Replacing $($currentThumbprint) ($($currentFriendlyName))."
            }
        }

        if ($currentThumbprint -ne $Thumbprint) {
            Write-Verbose "Configure $($ServerInstance) to use $($Thumbprint) as ServicesCertificateThumbprint."
            Set-NAVServerConfiguration -ServerInstance $ServerInstance -KeyName ServicesCertificateThumbprint -KeyValue $Thumbprint -WarningAction SilentlyContinue
            if (-not $SkipRestart) {
                if ((Get-NAVServerInstance -ServerInstance $ServerInstance).State -eq 'Running') {
                    Write-Verbose "Restart server instance $($ServerInstance)"
                    Restart-NAVServerInstance -ServerInstance $ServerInstance | Out-Null
                }
            }
            return $true
        } else {
            Write-Verbose "Server $($ServerInstance) already using the certificate $($Thumbprint)."
            return $true
        }
    }
    
    end {
        
    }
}