Получение Windows Product Key

Возьмем для примера некую фирму, условно называемую «Рога и Копыта» которая решив стать честной лицензирует парк компьютеров.

Компьютеров немного, штук 100-150, но закупались они разными партиями, операционные системы ставились разными «умельцами». Набор установленного ПО разнообразен, одних только пакетов Microsoft Office нашлось от Office XP до Office 2010.

В общем зоопарк редкостный…
Фирма закупила лицензии. Кое где серийники удалось поменять сразу, кое-где вспомнили и сделали мимоходом, списка хостов на которых менялись ключи никто не вел и остался неприятный осадок и уверенность того что «что то не так».

Как же проверить результаты работы?

Можно погуглив накопать массу сомнительного софта, но более правильным путем будет написание скрипта на Powershell.

Приведенный ниже скрипт был проверен на Windows XP, Vista x64 и Windows 7 (как x64 так и x86), так же на Windows Server 2003.

function Get-OsData {

param ($targets = ".")

$HKLM = 2147483650
$regPath = "Software\Microsoft\Windows NT\CurrentVersion"
$regValue = "DigitalProductId"

Foreach ($target in $targets) {
# очищаем переменные
$productKey = $null
$osData = $null

$wmi = [WMIClass]"\\$target\root\default:stdRegProv"
$data = $wmi.GetBinaryValue($HKLM, $regPath, $regValue)
$binArray = ($data.uValue)[52..66]
$charsArray = "B","C","D","F","G","H","J","K","M","P","Q","R","T",
"V","W","X","Y","2","3","4","6","7","8","9"

# раскодировка бинарных данных
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
}
}

# Создаем запрос к WMI
$osData = Get-WmiObject Win32_OperatingSystem -computer $target
# Формируем вывод результатов
# для наглядности выводятся доп. данные – организация, пользователь, номер билда и пр.
$obj = New-Object Object
$obj | Add-Member Noteproperty Computer -value $target
$obj | Add-Member Noteproperty Caption -value $osData.Caption
$obj | Add-Member Noteproperty Organization -value $osData.Organization
$obj | Add-Member Noteproperty Name -value $osData.Name
$obj | Add-Member Noteproperty Version -value $osData.Version
$obj | Add-Member Noteproperty OSArch -value $osData.OSArchitecture
$obj | Add-Member Noteproperty BuildNumber -value $osData.BuildNumber
$obj | Add-Member Noteproperty RegisteredTo -value $osData.RegisteredUser
$obj | Add-Member Noteproperty ProductID -value $osData.SerialNumber
$obj | Add-Member Noteproperty ProductKey -value $productkey
$obj
}
}


Что бы получить Product Key с локального ПК необходимо запустить функцию
Get-OsData


Для получения ключа с удаленного хоста функция вызывается несколько иначе:
Get-OsData "host-01", "host-02", "server-01", "server-02"


Моя любимая методика получения списка хостов из файла выглядит так:
$servers = get-content C:\servers.txt
foreach($server in $servers){
Get-OsData $server
}


Download Get-WindowsKey
  • 16 декабря 2010, 12:16
  • Ferret
  • просмотров: ~2473
  • рейтинг: ?

Комментарии (4)

Вы - anonymous, войти ?

можно использовать bbcode-теги
[b]жирный текст[/b]
[i]курсив[/i]
[u]underline[/u]
[s]зачеркнутый текст[/s]
[size=20px]размер шрифта[/size]
всякие изменения текста
[left][/left]
[right][/right]
[center][/center]
позиционирование элементов: картинки, текст и т.д
[url][/url]
[email][/email]
внутри тега [url] помещайте ссылки, а внутри [email] адрес электронной почты;
так же [url] можно использовать в виде:
[url=http://example.com]пример[/url],
[url=http://test.ru][img]http://flickr.com/givemeimg.png[/img][/url]
[code][/code]
[quote][/quote]
внутри тега [code] можно помещать программный код (подстветка попытается включиться автоматически); для выделения цитат используйте [quote]
также можно напрямую указать язык [code=cpp]int i;[/code]
[list][/list]
создаем списки, каждый элемент пишется после [*].

Можно указывать маркер - [list=marker].
возможные маркеры 1(decimal), i(lower-roman), I(upper-roman), a(lower-alpha), A(upper-alpha). Примеры:

[list][*]1 элемент[*]2 элемент[*]3 элемент[/list]
[list=1][*]1 элемент[*]2 элемент[*]3 элемент[/list]
[list=A][*]1 элемент[*]2 элемент[*]3 элемент[/list]
[table][/table]
оформляем таблицу, используя внутренние теги [tr] и [td].
[tr] - строка, [td] - поле в строке,
[table=100%] - можно задавать ширину в процентах, по-умолчанию ширина 100%
[td=2] - можно задавать сколько столбцов входит в это поле. Пример:

[table=50%][tr][td]столбец 1[/td][td]столбец 2[/td][/tr][tr][td]значение 1[/td][td]значение 2[/td][/tr][tr][td=2]сразу 2 столбца[/td][/tr][/table]
[img][/img]
тег для вставки фото или картинок, мы любим картинки. Примеры использования:

[img]http://ya.ru/logo.png[/img],
[img=100x100px]http://ya.ru/logo.png[/img]
[img=fullimg.url]thumbimg.url[/img],
Пожалуйста загружайте картинки на наш сайт, либо вставляйте с бекбоновских ресурсов.
[video][/video]
Проигрывает видео, внутрь вставляем ссылки на видео, поддерживается Play.Ykt.Ru(нужно вставить ссылку на страницу с видео) и tv.ykt.ru(нужно вставить ссылку на адрес файла)