26

Throughout the office we have several computers running Windows 10 (a dozen or so) but we have no clear idea which of our licenses are activated on which computer. Is it possible to extract the currently used license key from each computer?

We don't use AD or a KMS or anything like that, each computer is set up solely for the individual working on it. We are aware of which keys we own, but we don't know which are in use and where. We have a mix of OEM, MSDN and "regular" licenses.

MMM
  • 3,257

6 Answers6

35

You can use NirSoft's 'ProduKey'. You can download it on nirsoft.net. This is a freeware utility which allows you not only to see Windows keys, but also various other Microsoft product keys.

This method works for volume licenses, as well as for OEM and other standalone licenses.

Note that it does not officially support Windows 10, but my experience so far has been successful.

BramMooij
  • 828
15

Enter:

wmic path softwareLicensingService get OA3xOriginalProductKey 

into Command Prompt (Admin), then hit enter.

This will show the original Windows 10 product key for each machine.

NOTE: This only works for OEM licenses.

Virtuality
  • 1,361
6

If you are running windows on a genuine windows copy that is connected to the motherboard (an OEM key), you can use this command i windows administrator command prompt:

wmic path softwareLicensingService get OA3xOriginalProductKey

or in Administrator Powershell

$(Get-WmiObject -query 'select * from SoftwareLicensingService').OA3xOriginalProductKey

however, if you entered a product key or have a digital liscence connected to the computer, this won't work. You can get the product key that is on your computer with a VBScript as shown here authored by Hackoo. There are many different VBScripts well known to get your product key and most of them are based on the registry since the registry stores your product key formatted in a specific way (semi-encrypted but not really if you will).

Sometimes, the registry values change or get removed so in that case, I would use extra third-party software if that is not a limitation or of concern. My favorite right now is ProduKey


VBScript by Hackoo below

const HKEY_LOCAL_MACHINE = &H80000002

strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion" strValueName = "DigitalProductId" strComputer = "." dim iValues()

Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\" & _ strComputer & "\root\default:StdRegProv") oReg.GetBinaryValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,iValues

Dim arrDPID arrDPID = Array() For i = 52 to 66 ReDim Preserve arrDPID( UBound(arrDPID) + 1 ) arrDPID( UBound(arrDPID) ) = iValues(i) Next ' <--- Create an array to hold the valid characters for a microsoft Product Key ---> Dim arrChars arrChars = Array("B","C","D","F","G","H","J","K","M","P","Q","R","T","V","W","X","Y","2","3","4","6","7","8","9")

' <--- The clever bit !!! (Decrypt the base24 encoded binary data) ---> For i = 24 To 0 Step -1 k = 0 For j = 14 To 0 Step -1 k = k * 256 Xor arrDPID(j) arrDPID(j) = Int(k / 24) k = k Mod 24 Next strProductKey = arrChars(k) & strProductKey ' <--- add the "-" between the groups of 5 Char ---> If i Mod 5 = 0 And i <> 0 Then strProductKey = "-" & strProductKey Next strFinalKey = strProductKey

' <--- This part of the script displays operating system Information and the license Key ---> strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2") Set colOperatingSystems = objWMIService.ExecQuery _ ("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystems strOS = objOperatingSystem.Caption strBuild = objOperatingSystem.BuildNumber strSerial = objOperatingSystem.SerialNumber strRegistered = objOperatingSystem.RegisteredUser Next

Set wshShell=CreateObject("wscript.shell") strPopupMsg = strOS & vbNewLine & vbNewLine strPopupMsg = strPopupMsg & "Build Number: " & strBuild & vbNewLine strPopupMsg = strPopupMsg & "PID: " & strSerial & vbNewLine & vbNewLine strPopupMsg = strPopupMsg & "Registered to: " & strRegistered & vbNewLine & vbNewLine & vbNewLine strPopupMsg = strPopupMsg & "Your Windows Product Key is:" & vbNewLine & vbNewLine & strFinalKey strPopupTitle = "Microsoft Windows License Information" wshShell.Popup strPopupMsg,,strPopupTitle,vbCancelOnly+vbinformation

Another VBScript that works

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&quot; & UserName & "\Desktop\WindowsKeyInfo.txt" Set fso = CreateObject("Scripting.FileSystemObject") Set txt = fso.CreateTextFile(fName) txt.Writeline Data txt.Close End Function

1

You can use this excellent VBScript code found at https://stackoverflow.com/questions/30255656/vbscript-to-return-windows-product-key

const HKEY_LOCAL_MACHINE = &H80000002

strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion" strValueName = "DigitalProductId" strComputer = "." dim iValues()

Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\" & _ strComputer & "\root\default:StdRegProv") oReg.GetBinaryValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,iValues

Dim arrDPID arrDPID = Array() For i = 52 to 66 ReDim Preserve arrDPID( UBound(arrDPID) + 1 ) arrDPID( UBound(arrDPID) ) = iValues(i) Next ' <--- Create an array to hold the valid characters for a microsoft Product Key ---> Dim arrChars arrChars = Array("B","C","D","F","G","H","J","K","M","P","Q","R","T","V","W","X","Y","2","3","4","6","7","8","9")

' <--- The clever bit !!! (Decrypt the base24 encoded binary data) ---> For i = 24 To 0 Step -1 k = 0 For j = 14 To 0 Step -1 k = k * 256 Xor arrDPID(j) arrDPID(j) = Int(k / 24) k = k Mod 24 Next strProductKey = arrChars(k) & strProductKey ' <--- add the "-" between the groups of 5 Char ---> If i Mod 5 = 0 And i <> 0 Then strProductKey = "-" & strProductKey Next strFinalKey = strProductKey

' <--- This part of the script displays operating system Information and the license Key ---> strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2") Set colOperatingSystems = objWMIService.ExecQuery _ ("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystems strOS = objOperatingSystem.Caption strBuild = objOperatingSystem.BuildNumber strSerial = objOperatingSystem.SerialNumber strRegistered = objOperatingSystem.RegisteredUser Next

Set wshShell=CreateObject("wscript.shell") strPopupMsg = strOS & vbNewLine & vbNewLine strPopupMsg = strPopupMsg & "Build Number: " & strBuild & vbNewLine strPopupMsg = strPopupMsg & "PID: " & strSerial & vbNewLine & vbNewLine strPopupMsg = strPopupMsg & "Registered to: " & strRegistered & vbNewLine & vbNewLine & vbNewLine strPopupMsg = strPopupMsg & "Your Windows Product Key is:" & vbNewLine & vbNewLine & strFinalKey strPopupTitle = "Microsoft Windows License Information" wshShell.Popup strPopupMsg,,strPopupTitle,vbCancelOnly+vbinformation

It will pop up a message including OS version, build number, OEM product ID and the product key from registry. Activation is required before doing this, otherwise it will return wrong product key. To find product key without activation, you can try KeyFinder https://www.magicaljellybean.com/keyfinder/

wasif
  • 9,176
-1

You can use Belarc Advisor, downloadable from Belarc.com.

It will give you a comprehensive list of the software on the computer, as well as their license keys.

wgr
  • 25
  • 2
-2

get a copy of RecoverKeys recover-keys.com It will also work (if you choose) to scan across network or on a second drive in our machine (example, I moved an old C: drive into my new machine and RK found the serials and prod #'s on that drive too.

Then you can save all keys to a database it keeps