Caso seja necessário consultar a chave/key de SQL Server (por exemplo quando queremos instalar o SQL Server Reporting Services (SSRS) que irá exigir a chave/key), podem utilizar o script de power shell abaixo no Windows Server onde está instalado o SQL Server.

Para obter a chave do SQL Server, correr o script abaixo em PowerShell executando como administrador (Run us administrator).

  1. Pesquisar pelo PowerShell e Executar como Administrador (Run us administrator)
  2. E copiar e colocar o script, deverá inserir o nome da instancia de SQL e, teclar Enter.

# Confirmado o funcionamento no Windows nas versões SQL Server 2016-2019
# Necessário substituir fornecer o nome da instancia de SQL quando for solicitado
function GetSqlServerProductKey {
    param (
        [string]$InstanceName
    )

    $localmachine = [Microsoft.Win32.RegistryHive]::LocalMachine
    $defaultview = [Microsoft.Win32.RegistryView]::Default
    $reg = [Microsoft.Win32.RegistryKey]::OpenBaseKey($localmachine, $defaultview)

    # Caminho do registro baseado no nome da instância
    $key = "SOFTWARE\Microsoft\Microsoft SQL Server$InstanceName\Setup"

    # Tenta aceder a subchave e obter o DigitalProductID
    try {
        $encodedData = $reg.OpenSubKey($key).GetValue("DigitalProductID")
        $reg.Close()
        
        # Valida se a chave foi encontrada
        if (-not $encodedData) {
            Write-Host "DigitalProductID não encontrada para a instância: $InstanceName"
            return
        }

        # Conversão do binário para a chave do produto
        $binArray = ($encodedData)[0..66]
        $productKey = $null
        $charsArray = "B", "C", "D", "F", "G", "H", "J", "K", "M", "P", "Q", "R", "T", "V", "W", "X", "Y", "2", "3", "4", "6", "7", "8", "9"
        $isNKey = ([math]::truncate($binArray[14] / 0x6) -band 0x1) -ne 0
        if ($isNKey) {
            $binArray[14] = $binArray[14] -band 0xF7
        }
        $last = 0
        for ($i = 24; $i -ge 0; $i--) {
            $k = 0
            for ($j = 14; $j -ge 0; $j--) {
                $k = $k * 256 -bxor $binArray[$j]
                $binArray[$j] = [math]::truncate($k / 24)
                $k = $k % 24
            }
            $productKey = $charsArray[$k] + $productKey
            $last = $k
        }
        if ($isNKey) {
            $part1 = $productKey.Substring(1, $last)
            $part2 = $productKey.Substring(1, $productKey.Length - 1)
            if ($last -eq 0) {
                $productKey = "N" + $part2
            } else {
                $productKey = $part2.Insert($part2.IndexOf($part1) + $part1.Length, "N")
            }
        }
        $productKey = $productKey.Insert(20, "-").Insert(15, "-").Insert(10, "-").Insert(5, "-")
        Write-Host "Chave do Produto: $productKey"
    }
    catch {
        Write-Host "Erro ao tentar aceder ao caminho do registro ou a processar a chave do produto."
    }
}

# Pergunta ao utilizador o nome da instância SQL Server
$instanceName = Read-Host "Por favor, insira o nome da instância SQL Server (Ex: MSSQL13.PTCLOUDSQL)"

# Chama a função com a instância fornecida
GetSqlServerProductKey -InstanceName $instanceName

Este artigo foi útil?

Duarte Spínola

Deixe um Comentário