Retrieving a Windows 10 Key before reinstallation

Retrieving a Windows 10 Key before reinstallation

  • 1

Like many folks, when I’ve purchased a PC for personal use and gotten to the point where I want to reinstall Windows, I look on the physical case somewhere for the glittery and reflective OEM label that has the Windows key printed on it.

No such luck these days.

However, this time around, I found myself with no such option.  For Windows 10 computers that come pre-activated, there is a key embedded in the firmware.

There are a handful of ways to retrieve keys (both embedded and keys applied manually or through an unattended setup file .  Here’s the easiest methods:


The UEFI key can be retrieved via WMI. The Get-WmiObject cmdlet is your friend here.

From an elevated PowerShell prompt, type:

(Get-WmiObject SoftwareLicensingService).OA3xOriginalProductKey

If your machine has an embedded UEFI firmware key, it will be displayed in the console window.

There are also a few other interesting things you can see in that namespace–just omit the .OA3xOriginalProductKey part of the command.

Command Prompt

Speaking of WMI, you can also use the slightly more cryptic WMIC command.  From either an elevated CMD prompt or elevated PowerShell prompt, type:

wmic path SoftwareLicensingService get OA3xOriginalProductKey

This should display the same result as the PowerShell method (considering they both look at the same data).

VB Script

And, don’t thank me for this one.  This has been floating around for awhile, but in the interest of completeness, I thought I’d drop it here as well.

Option Explicit
Dim objshell,path,DigitalID, Result
Set objshell = CreateObject("WScript.Shell")
'Set registry key path
Path = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
'Registry key value
DigitalID = objshell.RegRead(Path & "DigitalProductId")
Dim ProductName,ProductID,ProductKey,ProductData
'Get ProductName, ProductID, ProductKey
ProductName = "Product Name: " & objshell.RegRead(Path & "ProductName")
ProductID = "Product ID: " & objshell.RegRead(Path & "ProductID")
ProductKey = "Installed Key: " & ConvertToKey(DigitalID)
ProductData = ProductName & vbNewLine & ProductID & vbNewLine & ProductKey
'Show messbox if save to a file
If vbYes = MsgBox(ProductData & vblf & vblf & "Save to a file?", vbYesNo + vbQuestion, "BackUp Windows Key Information") then
Save ProductData
End If
'Convert binary to chars
Function ConvertToKey(Key)
Const KeyOffset = 52
Dim isWin8, Maps, i, j, Current, KeyOutput, Last, keypart1, insert
'Check if OS is Windows 8
isWin8 = (Key(66) \ 6) And 1
Key(66) = (Key(66) And &HF7) Or ((isWin8 And 2) * 4)
i = 24
Current= 0
j = 14
Current = Current* 256
Current = Key(j + KeyOffset) + Current
Key(j + KeyOffset) = (Current \ 24)
Current=Current Mod 24
j = j -1
Loop While j >= 0
i = i -1
KeyOutput = Mid(Maps,Current+ 1, 1) & KeyOutput
Last = Current
Loop While i >= 0

If (isWin8 = 1) Then
keypart1 = Mid(KeyOutput, 2, Last)
insert = "N"
KeyOutput = Replace(KeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
If Last = 0 Then KeyOutput = insert & KeyOutput
End If
ConvertToKey = Mid(KeyOutput, 1, 5) & "-" & Mid(KeyOutput, 6, 5) & "-" & Mid(KeyOutput, 11, 5) & "-" & Mid(KeyOutput, 16, 5) & "-" & Mid(KeyOutput, 21, 5)
End Function
'Save data to a file
Function Save(Data)
Dim fso, fName, txt,objshell,UserName
Set objshell = CreateObject("")
'Get current user name
UserName = objshell.ExpandEnvironmentStrings("%UserName%")
'Create a text file on desktop
fName = "C:\Users\" & UserName & "\Desktop\WindowsKeyInfo.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set txt = fso.CreateTextFile(fName)
txt.Writeline Data
End Function

To run the VBScript, save the above text with a .vbs extension and run (from CMD prompt):

cscript filename.vbs

Your key will be returned in a VBScript message box.

If you’ve tried both methods, you may discover that you have more than one Windows key for your installation (as in maybe you reinstalled once already and didn’t know you had access to an embedded key and went out and bought a license).


Published by Aaron Guilmette

Helping companies conquer inferior technology since 1997. I spend my time developing and implementing technology solutions so people can spend less time with technology. Specialties: Active Directory and Exchange consulting and deployment, Virtualization, Disaster Recovery, Office 365, datacenter migration/consolidation, cheese.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.