# encoding: ascii
# api: powershell
# title: get windows product key
# description: retrieve the windows product key of a specified machine using WMI
# version: 0.1
# type: function
# author: greg zakharov
# license: CC0
# function: Get-ProductKey
# x-poshcode-id: 5427
# x-derived-from-id: 5477
# x-archived: 2014-10-08T15:45:29
# x-published: 2014-09-14T11:14:00
#
#
function Get-ProductKey([String]$Computer = '.') {
<#
.NOTES
Author: greg zakharov
#>
begin {
$val = [Byte[]]([wmiclass]('\\' + $Computer + '\root\default:StdRegProv')).GetBinaryValue(
2147483650, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'DigitalProductId'
).uValue[52..66]
$map = "BCDFGHJKMPQRTVWXY2346789"
$key = ""
}
process {
for ($i = 24; $i -ge 0; $i--) {
$k = 0
for ($j = 14; $j -ge 0; $j--) {
$k = ($k * 256) -bxor $val[$j]
$val[$j] = [Math]::Floor([Double]($k / 24))
$k = $k % 24
}
$key = $map[$k] + $key
if (($i % 5) -eq 0 -and $i -ne 0) {$key = "-" + $key}
}
}
end {$key}
}