Конвертировать код VBS в CMD и экспортировать ключ только в key.txt - PullRequest
0 голосов
/ 03 октября 2019

Я хотел бы преобразовать приведенный ниже код в файл bat и экспортировать только ключ продукта abc123-abc123-abc123-abc123.

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

Я понятия не имею, как это сделать. Я просто хочу извлечь установленный ключ Windows в файл. Я пытаюсь использовать ключ продукта wmic get, но он становится пустым, и я подозреваю, что это потому, что он не встроен в OEM-чип, поэтому мне нужно найти установленный ключ.

1 Ответ

1 голос
/ 03 октября 2019

Попробуйте с этим кодом:

Option Explicit
DIM fso,NewsFile,WshShell,write2File
Set WshShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set write2File = fso.CreateTextFile(".\Key.txt", True)
write2File.WriteLine(ConvertToKey(WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId")))
write2File.Close
WshShell.run ".\Key.txt"
'**************************************************
Function ConvertToKey(Key)
    Const KeyOffset = 52
    Dim i,Chars,Cur,x,KeyOutput
    i = 28
    Chars = "BCDFGHJKMPQRTVWXY2346789"
    Do
        Cur = 0
        x = 14
        Do
            Cur = Cur * 256
            Cur = Key(x + KeyOffset) + Cur
            Key(x + KeyOffset) = (Cur \ 24) And 255
            Cur = Cur Mod 24
            x = x -1
        Loop While x >= 0
        i = i -1
        KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
        If (((29 - i) Mod 6) = 0) And (i <> -1) Then
            i = i -1
            KeyOutput = "-" & KeyOutput
        End If
    Loop While i >= 0
    ConvertToKey = KeyOutput
End Function
'**************************************************
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...