Досить специфічна тема і потрібна дуже і дуже рідко, але так як цей сайт створювався як архів корисних знань, ця стаття обов’язково повинна була тут з’явитися. Отже, кому може знадобитися дана стаття? У першу чергу тим, хто втратив або знищив свій ключ продукту. Та ж наклейка на ноутбуках з часом може стертися, і це створить певну частку проблеми при перевстановлення системи, так як доведеться купувати нову ліцензійну систему. Саме в цьому випадку знадобиться ця стаття, так як ви за допомогою пари кліків зможете побачити і переписати в більш надійне місце ваш ключ Windows. Працює на будь-якій операційній системі, в тому числі на Windows 8.1 і 8. Після прочитання цієї статті вам можна бути цікава стаття про відключення запиту ключа активації під час установки системи.

Інструкція складається з двох частин:
1) Визначення ключа Windows через VBScript.
2) Визначення ключа активації Windows PowerShell.

Визначення ключа встановленої системи Windows через VBScript.

1) Створюємо в будь-якому зручному місці текстовий файл. Називаємо його WindowsKey (в кінці даного способу доступний для скачки готовий файл, але все ж рекомендую створювати файл самому, так як при архівації чомусь втрачається кодування і не завжди виходить відновити).

2) Відкриваємо його текстовим редактором (блокнотом або аналогом). І копіюємо в нього наступний код:

Set WshShell = CreateObject(“WScript.Shell”)
regKey = “HKLMSOFTWAREMicrosoftWindows NTCurrentVersion”
DigitalProductId = WshShell.RegRead(regKey & “DigitalProductId”)
Win8ProductName = “Windows Product Name:” & WshShell.RegRead(regKey & “ProductName”) & vbNewLine
Win8ProductID = “Windows Product ID:” & WshShell.RegRead(regKey & “ProductID”) & vbNewLine
Win8ProductKey = ConvertToKey(DigitalProductId)
strProductKey =”Windows 8 Key:” & Win8ProductKey
Win8ProductID = Win8ProductName & Win8ProductID & strProductKey
MsgBox(Win8ProductKey)
MsgBox(Win8ProductID)
Function ConvertToKey(regKey)
Const KeyOffset = 52
isWin8 = (regKey(66) 6) And 1
regKey(66) = (regKey(66) And &HF7) Or ((isWin8 And 2) * 4)
j = 24
Chars = “BCDFGHJKMPQRTVWXY2346789”
Do
Cur = 0
y = 14
Do
Cur = Cur * 256
Cur = regKey(y + KeyOffset) + Cur
regKey(y + KeyOffset) = (Cur 24)
Cur = Cur Mod 24
y = y -1
Loop While y >= 0
j = j -1
winKeyOutput = Mid(Chars, Cur + 1, 1) & winKeyOutput
Last = Cur
Loop While j >= 0
If (isWin8 = 1) Then
keypart1 = Mid(winKeyOutput, 2, Last)
insert = “N”
winKeyOutput = Replace(winKeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
If Last = 0 Then winKeyOutput = insert & winKeyOutput
End If
a = Mid(winKeyOutput, 1, 5)
b = Mid(winKeyOutput, 6, 5)
c = Mid(winKeyOutput, 11, 5)
d = Mid(winKeyOutput, 16, 5)
e = Mid(winKeyOutput, 21, 5)
ConvertToKey = a & “-” & b & “-” & c & “-” & d & “-” & e
End Function

І зберігаємо файл.

3) Міняємо розширення файлу .vbs. За посиланням доступна інструкція по зміні розширення файлу.

4) Відкриваємо файл подвійним кліком. З’явиться вікно з вашим ключем активації.

Натискаєте ОК і з’являється вікно з більш детальною інформацією.

Для спрощення свого життя, ви можете завантажити готовий файл за посиланням: WindowsKey.vbs

2) Визначення ключа активації Windows PowerShell.

Є ще й альтернативний спосіб — це використання оболонки PowerShell. Але для початку нам потрібно підготувати модуль для неї.

1) Створюємо текстовий файл і називаємо його module (готовий файл модуля: module.ps1).

2) Відкриваємо його текстовим редактором і вставляємо наступний код:

## Декларація функції отримання ключа продукту Windows
## Скрипт призначений PowerShell версії 2.0 (актуальна для всіх версії Windows)
Function Get-WindowsProduct {
## Функція повертає ключ встановленою Windows з будь-якої машини в мережі, плюс коротку інфу по встановленої версії. Виклик без ключів передбачає звернення до хосту
param ($Targets = [System.Net.Dns]::GetHostName())
function PIDDecoderFromRegistry($digitalProductId) {
New Variable -Name base24 -Value ‘BCDFGHJKMPQRTVWXY2346789’ ## -Option Const ## <24> символу використовуються в ключі продукту Windows і Office
New Variable -Name decodeStringLength -Value 24 ## -Option Const ## ‘Чиста’ довжина зашифрованого ключа продукту
New Variable -Name decodeLength -Value 14 ## -Option Const ## Довжина зашифрованого ключа продукту в байтах (символи зберігаються в полубайтах)
New Variable -Name decodedKey -Value ([System.String]::Empty) ## Рядок містить розшифрований ключ продукту
## Перевірка, містить ключ продукту ‘N’ (таке можливо для Windows 8 і Office 15)
$containsN = ($digitalProductId[$decodeLength] / 8) -bAnd 1 ## ($digitalProductId[$decodeLength] -shr 3) -bAnd 1 ## PS 4.0
$digitalProductId[$decodeLength] = [System.Byte]($digitalProductId[$decodeLength] -bAnd [System.Convert]::ToByte(‘F7’, 16)) ## 247
## Власне процес розшифровки
for ($i = $decodeStringLength; $i -ge 0; $i–)
{
$digitMapIndex = 0
for ($j = $decodeLength; $j -ge 0; $j–)
{
$digitMapIndex = $digitMapIndex * 256 -bXor $digitalProductId[$j] ## $digitMapIndex -shl 8 -bXor $digitalProductId[$j] ## PS 4.0
$digitalProductId[$j] = [System.Math]::Truncate($digitMapIndex / $base24.Length)
$digitMapIndex = $digitMapIndex % $base24.Length
}
$decodedKey = $decodedKey.Insert(0, $base24[$digitMapIndex])
}
## Видалення першого символу в ключі та приміщення ‘N’ в потрібну позицію
if ([System.Boolean]$containsN)
{
$firstLetterIndex = 0
for ($index = 0; $index -lt $decodeStringLength; $index++)
{
if ($decodedKey[0] -ne $base24[$index]) {continue}
$firstLetterIndex = $index
break
}
$keyWithN = $decodedKey
$keyWithN = $keyWithN.Remove(0, 1)
$keyWithN = $keyWithN.Substring(0, $firstLetterIndex) + ‘N’ + $keyWithN.Remove(0, $firstLetterIndex)
$decodedKey = $keyWithN;
}
$returnValue = $decodedKey
## Вставка тире через кожні п’ять символів
for ($t = 20; $t -ge 5; $t -= 5)
{
$returnValue = $returnValue.Insert($t, ‘-‘)
}
return $returnValue
}
## Main
New Variable -Name hklm -Value 2147483650 ## -Option Const
New Variable -Name regPath -Value ‘SoftwareMicrosoftWindows NTCurrentVersion’ ## -Option Const
New Variable -Name regValue -Value ‘DigitalProductId’ ## -Option Const
Foreach ($target in $Targets) {
$win32os = $null
$wmi = [WMIClass]”\$targetrootdefault:stdRegProv”
$binArray = $wmi.GetBinaryValue($hklm,$regPath,$regValue).uValue[52..66] $win32os = Get-WmiObject -Class ‘Win32_OperatingSystem’ -ComputerName $target
$product = New-Object -TypeName System.Object
## Конструктор
$product | Add-Member -MemberType ‘NoteProperty’ -Name ‘Computer’ -Value $target
$product | Add-Member -MemberType ‘NoteProperty’ -Name “Caption” – Value $win32os.Caption
$product | Add-Member -MemberType ‘NoteProperty’ -Name ‘CSDVersion’ -Value $win32os.CSDVersion
$product | Add-Member -MemberType ‘NoteProperty’ -Name ‘OSArch’ -Value $win32os.OSArchitecture
$product | Add-Member -MemberType ‘NoteProperty’ -Name ‘BuildNumber’ -Value $win32os.BuildNumber
$product | Add-Member -MemberType ‘NoteProperty’ -Name ‘RegisteredTo’ -Value $win32os.RegisteredUser
$product | Add-Member -MemberType ‘NoteProperty’ -Name ‘ProductID’ -Value $win32os.SerialNumber
$product | Add-Member -MemberType ‘NoteProperty’ -Name ‘ProductKey’ -Value (PIDDecoderFromRegistry($binArray))
Write-Output $product
}
} ## End Get-WindowsProduct

Зберігаємо файл.

3) Міняємо розширення файлу .ps1 (інструкція по зміні розширення файлу).

4) Відкриваємо ” командний рядок від імені адміністратора. У Windows 8 8.1 для цього клікаєм правою кнопкою по куті «Пуск» і вибираємо «Командний рядок (Адміністратор)» в більш ранніх системах користуємось пошуком в меню пуск, вводимо cmd.exe і запускаємо файл від імені адміністратора (правою клавішею).

4) Запускаємо оболонку PowerShell ввівши команду powershell. На початку рядки з’являються літери PS.

5) Даємо дозвіл на виконання непідписаних скриптів, для цього вводимо команду:

Set-ExecutionPolicy RemoteSigned

І тиснемо Enter.

6) Далі підключаємо наш модуль, вводимо команду типу:

Import-Module “*путь_до_вашего_файла*”

У моєму випадку це буде виглядати ось так Import-Module «D:Windows keymodule.ps1» і тиснемо Enter.
Якщо ви створювали файл за допомогою блокнота, а не завантажили готовий файл доступний за посиланням в першому пункті, то з великою часткою ймовірності у вас показало наступну помилку:

Клацніть по файлу модуля правою кнопкою і виберіть «Змінити»:

Запуститься PowerShell ISE. У ньому відразу тисніть кнопку «Зберегти» і закривайте програму, він змінить кодування.

Після цього модуль підключається без помилок.

7) Вводимо команду на виконання скрипта:

Get-WindowsProduct

Скрипт відображає в командному рядку детальну інформацію про активацію системи.

Альтернативний скрипт для PowerShell працює на Windows 7 і більш ранніх системах.

На більш старих системах останній скрипт може працювати некоректно, тому надаю інший варіант скрипта: moduleWin7.ps1

На цьому все. Сподіваюся ця стаття виявилася вам корисною, натисніть одну з кнопок нижче, щоб розповісти про неї друзям. Також підпишіться на оновлення сайту, введіть свій e-mail у полі праворуч або підписавшись на групу Вконтакті.

Спасибі за увагу

Матеріал сайту Skesov.ru