AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1560951
Accepted
MMM
MMM
Asked: 2020-06-16 06:11:32 +0800 CST2020-06-16 06:11:32 +0800 CST 2020-06-16 06:11:32 +0800 CST

从机器中提取 Windows 10 许可证密钥

  • 772

在整个办公室中,我们有几台运行 Windows 10 的计算机(十几台),但我们不清楚我们的哪些许可证是在哪台计算机上激活的。是否可以从每台计算机中提取当前使用的许可证密钥?

我们不使用 AD 或 KMS 或类似的东西,每台计算机都是专门为使用它的个人设置的。我们知道我们拥有哪些密钥,但我们不知道哪些正在使用以及在哪里使用。我们混合了 OEM、MSDN 和“常规”许可证。

windows-10 license
  • 6 6 个回答
  • 7952 Views

6 个回答

  • Voted
  1. Best Answer
    BramMooij
    2020-06-16T06:56:23+08:002020-06-16T06:56:23+08:00

    您可以使用 NirSoft 的“ProduKey”。您可以在nirsoft.net上下载它。这是一个免费软件实用程序,您不仅可以查看 Windows 密钥,还可以查看各种其他 Microsoft 产品密钥。

    此方法适用于批量许可证以及 OEM 和其他独立许可证。

    请注意,它并没有正式支持 Windows 10,但我目前的经验是成功的。

    • 32
  2. Virtuality
    2020-06-16T06:22:01+08:002020-06-16T06:22:01+08:00

    进入:

    wmic path softwareLicensingService get OA3xOriginalProductKey 
    

    进入命令提示符(管理员),然后按回车键。

    这将显示每台机器的原始 Windows 10 产品密钥。

    注意:这仅适用于 OEM 许可证。

    • 15
  3. Nico Nekoru
    2020-06-17T10:13:43+08:002020-06-17T10:13:43+08:00

    如果您在连接到主板(OEM 密钥)的正版 Windows 副本上运行 Windows,则可以在 Windows 管理员命令提示符下使用此命令:

    wmic path softwareLicensingService get OA3xOriginalProductKey
    

    或在管理员 Powershell 中

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

    但是,如果您输入了产品密钥或将数字许可证连接到计算机,这将不起作用。您可以使用 VBScript 获取计算机上的产品密钥,如此处所示,由Hackoo创作。众所周知,有许多不同的 VBScripts 可以获取您的产品密钥,其中大多数都基于注册表,因为注册表以特定方式存储您的产品密钥(半加密,但如果您愿意,则不是真的)。

    有时,注册表值会更改或被删除,因此在这种情况下,如果这不是限制或值得关注的,我会使用额外的第三方软件。我现在最喜欢的是ProduKey


    下面是 Hackoo 的 VBScript

    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
    

    另一个有效的 VBScript

    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\" & UserName & "\Desktop\WindowsKeyInfo.txt"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set txt = fso.CreateTextFile(fName)
    txt.Writeline Data
    txt.Close
    End Function
    
    • 4
  4. Wasif
    2020-06-16T07:58:01+08:002020-06-16T07:58:01+08:00

    您可以使用在https://stackoverflow.com/questions/30255656/vbscript-to-return-windows-product-key找到的优秀 VBScript 代码

    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
    

    它将弹出一条消息,包括操作系统版本、内部版本号、OEM 产品 ID 和注册表中的产品密钥。在执行此操作之前需要激活,否则将返回错误的产品密钥。要查找未激活的产品密钥,您可以尝试 KeyFinder https://www.magicaljellybean.com/keyfinder/

    • 0
  5. wgr
    2020-06-17T12:33:31+08:002020-06-17T12:33:31+08:00

    您可以使用 Belarc Advisor,可从 Belarc.com 下载。

    它将为您提供计算机上软件的完整列表,以及它们的许可证密钥。

    • -3
  6. Nestor Fulcanelli
    2020-06-17T09:45:05+08:002020-06-17T09:45:05+08:00

    获取 RecoverKeys recover-keys.com 的副本 它也可以(如果您选择)跨网络扫描或在我们机器的第二个驱动器上进行扫描(例如,我将旧的 C: 驱动器移到我的新机器中,RK 找到了序列号和 prod # 也在那个驱动器上。

    然后您可以将所有密钥保存到它保存的数据库中

    • -4

相关问题

  • VMware Workstation USB 仲裁服务无法自动启动

  • 如何在域和 Linux 活动目录中启用指纹传感器

  • 资源管理器侧面板中的桌面外壳快捷方式

  • 为什么我不能将文件从 Android 发送到 Windows 10?

  • 在多个文件上打开方式?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    fixer1234 “HTTPS Everywhere”仍然相关吗? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve