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:
PowerShell
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 Maps = "BCDFGHJKMPQRTVWXY2346789" Do Current= 0 j = 14 Do 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("wscript.shell") '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 txt.Close 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).
Cheers!