我在这里找到了一个可能的解决方案:http://youtu.be/71Vc9QiraQE
我自己不是powershell用户,不能完全遵循脚本中的代码。
这将是一个有用的脚本,以帮助重新安装时,操作系统已升级。我的问题是我想在使用它之前更多地了解它,或者至少被告知它看起来无害。
下面是脚本:
function Get-WindowsKey {
## function to retrieve the Windows Product Key from any PC
param ($targets = ".")
$hklm = 2147483650
$regPath = "Software\Microsoft\Windows NT\CurrentVersion"
$regValue = "DigitalProductId"
Foreach ($target in $targets) {
$productKey = $null
$win32os = $null
$wmi = [WMIClass]"\\$target\root\default:stdRegProv"
$data = $wmi.GetBinaryValue($hklm,$regPath,$regValue)
$binArray = ($data.uValue)[52..66]
$charsArray = "B","C","D","E","F","G","H","J","K","M","P","Q","R","T","V","W","X","Y","2","3","4","5","6","7","8","9"
## decrypt base24 encoded binary data
For ($i = 24; $i -ge 0; $i--) {
$k = 0
For ($j = 14; $j -ge 0; $j--) {
$k = $k * 256 -bxor $binArray[$j]
$binArray[$j] = [math]::truncate($k / 24)
$k = $k % 24
}
$productKey = $charsArray[$k] + $productKey
If (($i % 5 -eq 0) -and ($i -ne 0)) {
$productKey = "-" + $productKey
}
}
$win32os = Get-WmiObject Win32_OperatingSystem -computer $target
$obj = New-Object Object
$obj | Add-Member Noteproperty Computer -value $target
$obj | Add-Member Noteproperty Caption -value $win32os.Caption
$obj | Add-Member Noteproperty CSDVersion -value $win32os.CSDVersion
$obj | Add-Member Noteproperty OSArch -value $win32os.OSArchitecture
$obj | Add-Member Noteproperty BuildNumber -value $win32os.BuildNumber
$obj | Add-Member Noteproperty RegisteredTo -value $win32os.RegisteredUser
$obj | Add-Member Noteproperty ProductID -value $win32os.SerialNumber
$obj | Add-Member Noteproperty ProductKey -value $productkey
$obj
}
}
Get-WindowsKey
在Windows PowerShell中使用的第一个命令:
Set-ExecutionPolicy RemoteSigned
- 如果第一个脚本不起作用,请尝试以下操作:* 我可以使用此脚本获取密钥,但我必须修复脚本,将最后一行更改为:
function Get-WindowsKey {
# ...
}
Get-WindowsKey localhost
3条答案
按热度按时间uyto3xhc1#
我认为YouTube视频有点过头了,你可以简单地将其中的内容剪切并粘贴到PowerShell窗口中,而不必在执行策略和导入文件方面做手脚。
只需打开PowerShell,将下面的代码粘贴到其中,然后按Enter几次,直到它返回。
我强烈建议备份硬盘驱动器(或完全替换它),以防脚本没有正确解密。这将是一种吮吸去通过这一切,发现它是错误的,你刚刚擦除您以前的操作系统。
mi7gmzs62#
试图解释代码的作用。
该脚本阅读注册表值
Software\Microsoft\Windows NT\CurrentVersion\DigitalProductId
并提取相关部分正如代码中的注解所说,它随后解码(“解密”)for循环中的值。注册表值为
base24
编码。最后,代码显示了产品密钥沿着几个系统值
根据它是零售版还是企业版,注册表值可以在
DigitalProductId
或DigitalProductId4
中找到,例如vs
bvjxkvbb3#
密码是错误的,你得到的密钥解密是错误的...看看$charsArray,没有E和其他几个...