PowerShell小技巧之读取Windows产品密钥
之前大多数人可能用过VBS读取Windows产品密钥的VBS脚本,VBS脚本通常都比较隐晦、难懂,今天忙里偷闲,随手写了一个用于读取Windows产品密钥的PowerShell脚本。
代码如下:
=====文件名:Get-WindowsProductKey.ps1===== functionGet-WindowsProductKey([string]$computer) {
$comments=@' author:fuhj(powershell#live.cn,http://fuhaijun.com) example:Get-WindowsProductKey. '@ $reg=[WMIClass]("\\"+$computer+"\root\default:StdRegProv") $values=[byte[]]($reg.getbinaryvalue(2147483650,"SOFTWARE\Microsoft\WindowsNT\CurrentVersion","DigitalProductId").uvalue) $lookup=[char[]]("B","C","D","F","G","H","J","K","M","P","Q","R","T","V","W","X","Y","2","3","4","6","7","8","9") $keyStartIndex=[int]52; $keyEndIndex=[int]($keyStartIndex+15); $decodeLength=[int]29 $decodeStringLength=[int]15 $decodedChars=new-objectchar[]$decodeLength $hexPid=new-objectSystem.Collections.ArrayList for($i=$keyStartIndex;$i-le$keyEndIndex;$i++){[void]$hexPid.Add($values[$i])} for($i=$decodeLength-1;$i-ge0;$i--) { if(($i+1)%6-eq0){$decodedChars[$i]='-'} else { $digitMapIndex=[int]0 for($j=$decodeStringLength-1;$j-ge0;$j--) { $byteValue=[int](($digitMapIndex*[int]256)-bor[byte]$hexPid[$j]); $hexPid[$j]=[byte]([math]::Floor($byteValue/24)); $digitMapIndex=$byteValue%24; $decodedChars[$i]=$lookup[$digitMapIndex]; } } } $STR='' $decodedChars|%{$str+=$_} $STR }
Get-WindowsProductKey.