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

41 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?

  10. Olá Jorge.
    Tenho o win 7 home premium SP1.
    Testei o método e apareceu um serial, porém fiz o teste com o comando
    %windir%\system32\cmd /c slmgr/dli
    e a parte da chave que apareceu, não está no serial informado pelo powershell.
    Sabe o que pode ter ocorrido ?

    • Se diz que a chave é inválida é porque a chave não corresponde ao produto que estás a tentar instalar. Confirma que a edição do Windows (p.e. Home Edition, Professional, etc) e a plataforma (p.e. x86, x64) são exatamente iguais.
      Tem em atenção que as chaves dos produtos OEM são “especiais”.

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