Como obter a chave de produto do Windows

Recentemente tive a necessidade de conseguir saber qual foi a chave de produto (Product Key) usada na instalação do Windows. Esta situação foi provocada pela necessidade de reinstalar o sistema operativo e o dono do computador não se lembrar onde a tinha guardado. Apesar de se poder instalar o Windows 7 sem especificar a chave, o mesmo não se aplica à ativação do mesmo, logo teria de aproveitar o facto do sistema operativo ainda funcionar para conseguir saber qual foi a chave usada no momento da instalação.

É verdade que existem muitas aplicações no mercado que resolvem esta situação, mas o objetivo deste artigo é mostrar como é que se consegue obter esta informação usando apenas os recursos que já se encontram disponíveis no sistema operativo.

A chave de produto do Windows está armazenada numa entrada do registo de forma encriptada. A cifra usada é publica e encontra-se documentada no portal da Microsoft.

 

Instruções:

1 – Clicar em “Iniciar” e escrever “PowerShell ISE”

2 – No editor PowerShell colar o seguinte código:

 

 

function Get-WindowsKey


   
param ($targets = ".")
    $hklm = 2147483650
    $regPath = "Software\Microsoft\Windows NT\CurrentVersion"
    $regValue = "DigitalProductId4"
    Foreach ($target in $targets) {
        $productKey = $null
        $win32os = $null
        $wmi = [WMIClass]"\\$target\root\default:stdRegProv"
        $data = $wmi.GetBinaryValue($hklm,$regPath,$regValue)
        $binArray = ($data.uValue)[52..66]
        $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" 
        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
            If (($i % 5 -eq 0) -and ($i -ne 0)) {
                $productKey = "-" + $productKey
            }
        }
        $win32os = Get-WmiObject Win32_OperatingSystem -computer $target
        $obj = New-Object Object
        $obj | Add-Member Noteproperty "Nome do Computador" -value $target
        $obj | Add-Member Noteproperty "Edição do Windows" -value $win32os.Caption
        $obj | Add-Member Noteproperty "Versão do Service Pack" -value $win32os.CSDVersion
        $obj | Add-Member Noteproperty "Arquitetura" -value $win32os.OSArchitecture
        $obj | Add-Member Noteproperty "Número da Versão" -value $win32os.BuildNumber
        $obj | Add-Member Noteproperty "Registado para" -value $win32os.RegisteredUser
        $obj | Add-Member Noteproperty "Canal de origem (ProductID)" -value $win32os.SerialNumber
        $obj | Add-Member Noteproperty "Chave do produto (ProductKey)" -value $productkey
        $obj
    }
}

Get-WindowsKey

 

 

blog055

 

3 – Pressionar a tecla F5 ou então clicar no botão play

 

 

Na área de resultados vai aparecer o seguinte:

Nome do Computador                       : .
Edição do Windows                            : Microsoft Windows 7 Enterprise
Versão do Service Pack                    : Service Pack 1
Arquitetura                                            : 64-bit
Número da Versão                              : 7601
Registado para                                      : NOME_DO_REGISTO
Canal de origem (ProductID)         : 11111-11111-11111-11111
Chave do produto (ProductKey) : A123A-A123A-A123A-A123A-A123A

 

 

O script PowerShell que aqui coloquei foi desenhado por forma a ser possível obter a chave de produto em múltiplas máquinas remotas, bastando para isso passar o nome do(s) computador(es) à função Get-WindowsKey. Quando o nome da máquina não é especificado o mesmo é substituído por “.” o que corresponde à máquina local.

Para que este script funcione em máquinas remotas é necessário garantir que o contexto de utilizador na qual o script é executado tem permissões de administração sobre a máquina remota e/ou permissões sobre os objetos WMI das máquinas remotas.

Nas instalações OEM do Windows a chave obtida através deste método é diferente daquela que se encontra impressa no COA (Certificado de Autenticidade). Isto significa que a chave obtida é apenas válida quando usada em conjunto com o meio de instalação/recuperação fornecido pelo fabricante do computador.

 

 

Recursos adicionais:

Página de onde foi retirado o script original: http://mspowershell.blogspot.pt/2009/02/retrieveing-windows-product-key.html

Página oficial do PowerShell:

http://technet.microsoft.com/pt-pt/scriptcenter/dd742419.aspx

Como interpretar o valor do ProductID:

http://support.microsoft.com/kb/936607/pt

 

Notas:

- O resultado apresentado em “ProductID” e “ProductKey” foram alterados propositadamente neste artigo.

- Efetuei alterações ao script original por forma a corrigir uma pequena anomalia relativa ao nome da chave e efetuei a tradução dos resultados obtidos para o idioma Português.

- Em versões anteriores ao Windows 7 a chave é DigitalProductID

- Não funciona em Windows 8 e/ou Windows Server 2012

About these ads

36 thoughts on “Como obter a chave de produto do Windows

  1. Fiz o procedimento e obtive o erro a seguir, tem como resolver ?

    For ($i = 24; $i -ge 0; $i–) {

    É necessário fornecer uma expressão de valor no lado direito do operador ‘-‘.
    At line:14 char:27

    For ($j = 14; $j -ge 0; $j–) {
    É necessário fornecer uma expressão de valor no lado direito do operador ‘-‘.
    At line:16 char:27

    Corpo de função ausente em declaração function.
    At line:38 char:2

      • Oi José, parece que no editor do PowerShell ISE já estava correto, obtive o mesmo erro, pode erro de sintaxe no PowerShell ISE ?

        Erro:
        É necessário fornecer uma expressão de valor no lado direito do operador ‘-‘.
        At line:15 char:35

        É necessário fornecer uma expressão de valor no lado direito do operador ‘-‘.
        At line:17 char:39

        Corpo de função ausente em declaração function.
        At line:39 char:2

      • Olá Inácio,

        No processo de cópia do código da página do blogue para o ISE do PowerShell está a converter erradamente os carateres “- -” (coloquei um espaço do meio para se perceber que são dois sinais menos) por apenas um carater (“-“) que se assemelha ao sinal menos mas na verdade não o é. Para resolver o problema mencionado basta adicionar mais um sinal menos nas linhas 15 e 17. O resultado final é o seguinte:
        Linha 15: For ($i = 24; $i -ge 0; $i- -) {

        Linha 17: For ($j = 14; $j -ge 0; $j- -) {

        Notas:
        1. Para evitar problema de conversão deliberadamente um espaço a mais entre os sinais de menos que deverá ser retirado no código final;
        2. Vou editar novamente a entrada de blogue e tentar encontrar outro código HTML que seja mais “simpático” para o copy/paste. Substitui o sinal menos por um outro código HTML e pelo menos na minha configuração o copiar/colar do código diretamente para o ISE já funciona sem qualquer erro de interpretação.

        Obrigado Inácio pelo comentário.

  2. Meu windows é original tive que formartar a máquina e como estou sem leitor DVD passei os dados para meu pen Drinven e fiz instalação, acontece que todo hora vem mensagem que chave não original, com procedimento informado consegui a chave e quando digito a Microsolt informa que não chave válida.

  3. Olá, Jorge.

    Ao executar o script no PowerShell obtenho o seguinte erro:

    .\Get-WindowsKey.ps1 : O arquivo C:\users\joao\scripts\Get-WindowsKey.ps1 não pode ser carregado porque a execução de scripts foi desabilitada neste sistema. Para obter mais informações, consulte about_Execution_Policies em http://go.microsoft.com/fwlink/?LinkID=135170.
    No linha:1 caractere:1
    + .\Get-WindowsKey.ps1
    + ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : ErrodeSegurança: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

    Fiz set-ExecutionPolicy -ExecutionPolicy Undefined -Scope Process, respondendo S à questão, mas ainda assim o script não executa. O que estou fazendo errado?

    • Olá João,

      O PowerShell é bastante flexível e poderoso e para evitar que esse poder possa ser usado incorretamente, o Windows têm configurado por omissão uma restrição que impede a execução de qualquer script PowerShell.
      Para ativares a capacidade de correr o script faz o seguinte:
      1 – Clica em “Iniciar” e escreve “powershell”
      2 – Clica com o botão direito do rato em PowerShell e escolhe a opção “Executar como administrador”
      3 – Na janela do PowerShell executa o seguinte comando:
      Set-ExecutionPolicy Unrestricted
      Responde “Yes” para ativar

      A partir deste momento podes executar qualquer script.

      Para saberes mais sobres as políticas de execução do PowerShell lê o artigo do TechNet “Using the Set-ExecutionPolicy Cmdlet ” (http://technet.microsoft.com/en-us/library/ee176961.aspx)

  4. No meu Note apareceu certinho, copiei tudo e colei, Parabéns e Muito Obrigado, só não testei, quero guardar para quando precisar formatá-lo, só uma pergunta?
    Por que a chave no PC wizard e Everest aparece diferente outros codigos e com com trial?
    E tem como testá-la para saber antes se funcionará certinho.

    • Olá,

      Não sei dizer porque é que essas aplicações apresentam outros códigos, mas existe uma forma simples de saber se a chave de produto está minimamente certa. Executa o seguinte comando:
      %windir%\system32\cmd /c slmgr/dli
      A execução deste comando vai apresentar, entre outras informações, parte da chave do produto. Basta agora verificares se este pedaço se encontra na chave que te é dita pelas aplicações PC Wizard e Everest.
      Relativamente à pergunta de como testar para saber se vai tudo dar certo, a forma mais eficiente e fiável é simulares a instalação do sistema operativo numa máquina virtual. Ou seja, descarregas uma aplicação tipo VMware Player, escolhes a opção para criar uma máquina virtual, indicas o DVD de instalação do Windows e ligas a máquina. Quando te pedir o chave de produto escreves aquela que obtiveste e verificas se consegue passar nessa validação. Se a chave tiver correta o processo de instalação do Windows dá essa indicação.

  5. Infelizmente eu coloquei o meu computador em uma assistência técnica de antas! O miserável do funcionário rasgou a chave origina que fica atras da máquina. Como faço para ter a chave que se encontra impressa no COA (Certificado de Autenticidade)?

  6. Obrigada amigo por ajudar a todos que nao tinha como indentificar a sua chave,obrigada mesmo eu conseguir achar aqui e já salvei minha chave para nao peder mais,valeu mesmo =D

  7. Mas isso funciona depois que já formatei o pc? Ele consegue ainda pegar a chave após já instalado um sistema limpo sem estar ativado?

  8. Muito util. Pena que nao consegui instalar. meu pc foi formatado e acho que foi por isso. A chave de acesso deve vim de fabrica, ou não? Será que consigo instalar a chave mesmo sendo formatado?

    • Olá,

      Até ao Windows 8 era habitual os fabricantes colocarem a chave do Windows por debaixo do equipamento ou dentro do compartimento da bateria… Se não encontrares o selo COA, uma vez formatado é impossível recuperar a chave do produto.

  9. Seguindo os passos descritos eu consegui o numero da chave mas não aceita. Foi trocado a placa do pc. A loja que fez a manutenção é obrigada a fornecer um novo numero ou não? Como faço agora?

Deixar uma resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

WordPress.com Logo

Está a comentar usando a sua conta WordPress.com Log Out / Modificar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Log Out / Modificar )

Facebook photo

Está a comentar usando a sua conta Facebook Log Out / Modificar )

Google+ photo

Está a comentar usando a sua conta Google+ Log Out / Modificar )

Connecting to %s