Public/Set-MobileServerCertificate.ps1

function Set-MobileServerCertificate {
    [CmdletBinding()]
    param (
        [parameter(ValueFromPipeline=$true)]
        [System.Security.Cryptography.X509Certificates.X509Certificate2]
        $X509Certificate,

        [parameter(Position = 1, ValueFromPipelineByPropertyName=$true)]
        [string]
        $Thumbprint
    )
    process {
        $mosInfo = Get-MobileServerInfo -Verbose:$VerbosePreference
        $ipPort = "$($mosInfo.HttpsIp):$($mosInfo.HttpsPort)"
        $appId = "{00000000-0000-0000-0000-000000000000}"
        $certHash = if ($null -eq $X509Certificate) { $Thumbprint } else { $X509Certificate.Thumbprint }
        Write-Debug $mosInfo
        if ($null -eq $mosInfo.CertHash) {
            $result = netsh http add sslcert ipport=$ipPort appid="$appId" certhash=$certHash
            if ($result -notcontains 'SSL Certificate successfully added') {
                Write-Error "Failed to add certificate binding. $result"
                return
            }
            else {
                Write-Verbose [string]$result
            }
        } 
        else {
            $result = netsh http update sslcert ipport=$ipPort certhash=$certHash appid="$appId"
            if ($result -notcontains 'SSL Certificate successfully updated') {
                Write-Error "Failed to update certificate binding. $result"
                return
            }
            else {
                Write-Verbose [string]$result
            }
        }

        Restart-Service -Name 'Milestone XProtect Mobile Server' -Verbose:$VerbosePreference
    }
}