windows:get_the_windows_product_key:using_powershell
Table of Contents
Windows - Get the Windows Product Key - Using Powershell
RunProdKey.bat
This runs the powershell script Get-ProductKey.ps1.
@ECHO OFF Powershell.exe -executionpolicy remotesigned -File ./Get-ProductKey.ps1
NOTE: This sets the Powershell script bypass for running the powershell script.
Get-ProductKey.ps1
start-process -FilePath "CDKey.vbs" -Wait -Passthru $SLS = wmic path SoftwareLicensingService get OA3xOriginalProductKey $RLS = Get-ItemPropertyValue 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform' -Name BackupProductKeyDefault $SLSKey = $SLS.Split(" ",[System.StringSplitOptions]::RemoveEmptyEntries) $DPID = Get-ItemPropertyValue 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DefaultProductKey2' -Name DigitalProductId $EditionID = Get-ItemPropertyValue 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DefaultProductKey2' -Name EditionId function ConvertTo-ProductKey { param ( [parameter(Mandatory = $True, Position = 0)] $Registry, [parameter()] [Switch]$x64 ) begin { $map = "BCDFGHJKMPQRTVWXY2346789" } process { $ProductKey = "" $prodkey = $Registry[0x34 .. 0x42] for ($i = 24; $i -ge 0; $i--) { $r = 0 for ($j = 14; $j -ge 0; $j--) { $r = ($r * 256) -bxor $prodkey[$j] $prodkey[$j] = [math]::Floor([double]($r/24)) $r = $r % 24 } $ProductKey = $map[$r] + $ProductKey if (($i % 5) -eq 0 -and $i -ne 0) { $ProductKey = "-" + $ProductKey } } $ProductKey } } $x = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -name DigitalProductId key = ConvertTo-ProductKey $x.DigitalProductId $prodKey = "Windows Backup Product Key Default: $RLS `nOEM Software Licensing Service Key: $SLSKey `nDigital Product ID Windows Key: $key" Add-Content .\ProductKey.txt===== Get-ProductKey.ps1 ===== <code vb> start-process -FilePath "CDKey.vbs" -Wait -Passthru $SLS = wmic path SoftwareLicensingService get OA3xOriginalProductKey $RLS = Get-ItemPropertyValue 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform' -Name BackupProductKeyDefault $SLSKey = $SLS.Split(" ",[System.StringSplitOptions]::RemoveEmptyEntries) $DPID = Get-ItemPropertyValue 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DefaultProductKey2' -Name DigitalProductId $EditionID = Get-ItemPropertyValue 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DefaultProductKey2' -Name EditionId function ConvertTo-ProductKey { param ( [parameter(Mandatory = $True, Position = 0)] $Registry, [parameter()] [Switch]$x64 ) begin { $map = "BCDFGHJKMPQRTVWXY2346789" } process { $ProductKey = "" $prodkey = $Registry[0x34 .. 0x42] for ($i = 24; $i -ge 0; $i--) { $r = 0 for ($j = 14; $j -ge 0; $j--) { $r = ($r * 256) -bxor $prodkey[$j] $prodkey[$j] = [math]::Floor([double]($r/24)) $r = $r % 24 } $ProductKey = $map[$r] + $ProductKey if (($i % 5) -eq 0 -and $i -ne 0) { $ProductKey = "-" + $ProductKey } } $ProductKey } } $x = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -name DigitalProductId $key = ConvertTo-ProductKey $x.DigitalProductId $prodKey = "Windows Backup Product Key Default: $RLS `nOEM Software Licensing Service Key: $SLSKey `nDigital Product ID Windows Key: $key" Add-Content .\ProductKey.txt $prodKey
$prodKey </code>
CDKey.vbs
This script is run from the Get-ProductKey.ps1 powershell script.
The powershell script finds the keys such as the OEM Key and the registry BackupProductKeyDefault then appends it to the text file.
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 'Save Data to a file Save ProductData '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") fName = ".\ProductKey.txt" Set fso = CreateObject("Scripting.FileSystemObject") Set txt = fso.CreateTextFile(fName) txt.Writeline Data txt.Close End Function
References
windows/get_the_windows_product_key/using_powershell.txt · Last modified: 2022/06/14 09:48 by peter