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).
- Pesquisar pelo PowerShell e Executar como Administrador (Run us administrator)
- 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