Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] как узнать и сменить серийник XP из cmd ? (http://forum.oszone.net/showthread.php?t=183050)

Ingolder 16-08-2010 11:48 1474629

как узнать и сменить серийник XP из cmd ?
 
нужны две отдельные команды(скрипта). первая - чтобы узнать текущий серийник,
вторая - чтобы сменить на другой. Главное чтобы всё можно было сделать из командной строки.
помогите плиз.

NiOl 16-08-2010 13:09 1474693

Ну, певая проблема легко решается сторонней утилитой ProduKey от NirSoft

Код:

@for /f "tokens=3 delims=        " %%S in ('@ProduKey.exe /WindowsKeys 1 /OfficeKeys 0 /IEKeys 0 /SQLKeys 0 /ExchangeKeys 0 /stab ""') do echo %%S
По второй проблеме ничего хорошего не нашлось - уж очень многое зависит от версии и типа операционки... максимум, что накопал в гугле: Левый сайтик
К сожалению каюсь, опыта работы с лицензиями очень и очень мало и ограничен он только установкой "легалайзов" и готовых компов с предустановками.

Ingolder 16-08-2010 20:06 1474986

по первой проблеме - Непредвиденное появление: %%S
по второй - этот способ я уже находил, и он требует гуёвого взаимодействия, а не через цмд.

Vadikan 16-08-2010 22:29 1475070

Ingolder, ОС не указана, как всегда, видимо ХР, ибо на Vista/7 уже догуглил бы до slmgr.vbs.

В ХР, возможно, это наведет на какие-то мысли... How can I change the volume licensing product key on a Windows XP SP1-Based Computer?.

Ingolder 17-08-2010 11:30 1475384

Vadikan, да, именно XP :) sp3 rus

я не разбираюсь в vbs к сожалению.
попытка запуска скрипта выдаёт
запускаю естественно, С:\ChangeVLKey2600.vbs ключ

deepred 17-08-2010 11:42 1475407

Ingolder,

Замените в первых шести строках сценария символы " \ " на " ' "

Petya V4sechkin 17-08-2010 12:21 1475443

Цитата:

Цитата Ingolder
запускаю естественно, С:\ChangeVLKey2600.vbs ключ

Не тот.
В статье KB328874 читаем:

Цитата:

Цитата KB328874
Мы рекомендуем использовать сценарий ChangeVLKey2600.vbs на компьютерах под управлением системы Windows XP, на которых не установлена Windows XP с пакетом обновления 1 (SP1) или более поздние версии Windows XP, а на компьютерах, на которых установлена Windows XP с пакетом обновления 1 (SP1) или более поздние версии Windows XP, использовать сценарий ChangeVLKeySP1.vbs


NiOl 17-08-2010 12:32 1475449

Цитата:

Цитата Ingolder
по первой проблеме - Непредвиденное появление: %%S »

яйк! Попробуем в 3 строчки (и убидитесь, что после delims= стоит именно символ табуляции)
Код:

@Echo off
setlocal EnableExtensions
for /f "tokens=3 delims=        " %%S in ('ProduKey.exe /WindowsKeys 1 /OfficeKeys 0 /IEKeys 0 /SQLKeys 0 /ExchangeKeys 0 /stab ""') do echo %%S


Iska 17-08-2010 12:39 1475457

NiOl, думаю, дело было скорее всего в том, что Ingolder запускал напрямую, без использования пакетного файла.

Ingolder 17-08-2010 14:28 1475546

Iska, ага.
спасибо, товарищи, заработало. То, что надо!


Petya V4sechkin, я пробовал оба. одно и то же. оба одинаковую ошибку выдают.

El Sanchez 17-08-2010 19:04 1475745

Ingolder, вдогонку:
Цитата:

Цитата Ingolder
первая - чтобы узнать текущий серийник »

Код:

@Echo Off
SetLocal EnableDelayedExpansion

For /F "Tokens=3" %%A In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v DigitalProductId 2^>nul^|Find "REG_BINARY"') Do (
        Set Chars="BCDFGHJKMPQRTVWXY2346789"
        Set DigitalProductId=%%A
        Set DigitalProductId=!DigitalProductId:~104,30!
        For /L %%B In (0, 1, 24) Do (
                Set Var=0
                For /L %%C In (28, -2, 0) Do (
                        Call Set /A Var=0x!DigitalProductId:~%%C,2!+!Var!*256
                        Set /A BytesBeforeOffset=%%C
                        Set /A BytesAfterOffset=%%C+2
                        Set /A BytesChanged="(!Var!/24)&255"
                        Call :ChangeDigitalProductId "!BytesBeforeOffset!" "!BytesChanged!" "!BytesAfterOffset!"
                        Set /A Var=!Var!%%24
                )
                Set /A Num=!Var!+1
                Call Set LicenseKey=%%Chars:~!Num!,1%%!LicenseKey!
        )
)
If Not "!LicenseKey!"=="" (
        Echo !LicenseKey:~0,5!-!LicenseKey:~5,5!-!LicenseKey:~10,5!-!LicenseKey:~15,5!-!LicenseKey:~20,5!
) Else (
        Echo Get registry data error^^!
)
EndLocal
GoTo:EOF

:ChangeDigitalProductId
        Set HexChars=0123456789ABCDEF
        If %~2 LSS 16 (
                Set /A lBytePos=%~2
                Set /A hBytePos=0
        ) Else (
                Set /A lBytePos=%~2%%16
                Set /A hBytePos=%~2/16
        )
        Call Set DigitalProductId=!DigitalProductId:~0,%~1!%%HexChars:~%hBytePos%,1%%%%HexChars:~%lBytePos%,1%%!DigitalProductId:~%~3!

Цитата:

Цитата Ingolder
чтобы сменить на другой »

http://forum.oszone.net/showthread.php?t=83157

sov44 11-04-2011 21:12 1656069

El Sanchez, подскажите, как вывести тип лицензии Windows (OEM, Retail, VL), Home или Pro ?

sov44 12-04-2011 11:35 1656377

скрипт выводит id windows, по второму значению которого определяется тип лицензии.
Код:

@echo off
For /F "Skip=4 Tokens=3 delims=        " %%A In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V ProductId') Do Set Prod=%%A
echo %Prod%
pause

выводится значение типа xxxxx-yyy-zzzzzzz-zzzzz
Не знаю как присвоить второму значению переменную %yyy% и сделать перебор этой переменной с выводом на экран типа лицензии.
Варианты перебора yyy:
yyy = 000, 007, 335 - Retail
yyy = 270, 640-652, 699 - VLK
yyy = OEM - OEM

El Sanchez 12-04-2011 11:36 1656378

Цитата:

Цитата sov44
как вывести тип лицензии Windows (OEM, Retail, VL), Home или Pro ? »

sov44,
Код:

@Echo Off
For /F "Tokens=3" %%A In ('Reg Query HKLM\SYSTEM\Setup\Pid /v Pid^|Find "REG_SZ"') Do Set PID=%%A
For /F "Tokens=1* Delims==" %%A In ('WMIC OS GET Caption /VALUE 2^>nul^|Find "="') Do Set Edition=%%B

Echo Edition: %Edition%
:: CIDs
rem 000 : Other (includes some retail, upgrade and evaluation versions) (includes (some?) MSDNAA discs)
rem 006 : MS or Partner promotions
rem 007 : FIXME : Retail
rem 009 : Not for resale - bundle
rem 011 : Upgrade (XP Home?)
rem 013 : Upgrade (XP Pro)
rem 071 : FIXME : Unknown.
rem 083 : Windows Genuine Advantage
rem OEM : OEM (This does not specify royalty or normal OEM)
rem 270 : Volume License
rem 296 : MSDN
rem 308/347 : Microsoft Action Pack subscription
rem 335 : Retail
rem 640 through 652 : Volume License (usually generated via 270 CID in setupp.ini)
rem 699 : Volume Windows XP Tablet Edition
rem 770 : Retail (at least according to WGA Diagnostic)

If "%PID:~-3%"=="OEM" Echo Channel: OEM
If "%PID:~-3%"=="270" Echo Channel: VLK
:: etc


sov44 12-04-2011 11:38 1656379

El Sanchez, похоже вы меня опередили с ответом :)

в моём серийнике второе значение 640. По идее должно писать VLK, а пишет Caption

El Sanchez 12-04-2011 12:05 1656397

Цитата:

Цитата sov44
в моём серийнике второе значение 640. По идее должно писать VLK, а пишет Caption »

Токеном ошибся :), исправьте в 3 строке Set Edition=%%A на Set Edition=%%B.
И я не все CID'ы расписывал (см. последние строки, там только OEM и VLK(270)), список CID'ов выше. Нужное сами допишете?

sov44 12-04-2011 12:24 1656410

El Sanchez, всё ОК! Спасибо!
В качестве самообразования, не могли бы вы прокомментировать третью строчку вашего скрипта?

Расписал все CID'ы. Почему то всё равно при значении 640 в pid не приделяется VLK.
VLK определяется, как будто у меня в pid значение 270

Как то непонятно, по какому пути определяется тип лицензии?
в HKEY_LOCAL_MACHINE\SYSTEM\Setup\Pid Pid=xxxxx270
в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion ProductId=xxxxx-640-xxxxxxx-xxxxx

El Sanchez 12-04-2011 14:11 1656486

Цитата:

Цитата sov44
В качестве самообразования, не могли бы вы прокомментировать третью строчку вашего скрипта? »

WMIC OS GET Caption /VALUE 2>nul|Find "=" - цепочка команд, результат которой будем обрабатывать командой For.
WMIC OS GET Caption /VALUE - при помощи утилиты для работы с WMI получаем значение свойства Caption, доступного в псевдониме OS, в формате свойство=значение (параметр /VALUE); 2>nul - ошибки WMIC перенаправляем в никуда; Find "=" - фильтруем результат WMIC, ищется нужная строка, содержащая символ =.
Далее в For разбиваем результат на подстроки (1-я подстрока это Caption, все остальное идет во 2-ю подстроку - Tokens=1*), где в качестве разделителя подстрок служит символ = (Delims==) и присваиваем переменной Edition значение 2-й подстроки (%%B).

Цитата:

Цитата sov44
Как то непонятно, по какому пути определяется тип лицензии?
в HKEY_LOCAL_MACHINE\SYSTEM\Setup\Pid Pid=xxxxx270
в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion ProductId=xxxxx-640-xxxxxxx-xxxxx »

Я использовал 1-й вариант.

sov44 12-04-2011 16:22 1656574

El Sanchez, можно ли кроме как
Код:

WMIC OS GET Caption /VALUE
получить информацию о версии Home / Pro ? Команда хорошо работает под админом, а из-под юзера не хочет.

Iska 12-04-2011 17:49 1656624

Где брали сам список CID'ов?

El Sanchez 12-04-2011 18:09 1656641

Цитата:

Цитата sov44
получить информацию о версии Home / Pro ? Команда хорошо работает под админом, а из-под юзера не хочет. »

sov44, можно еще использовать команду systeminfo (пример для русской версии ОС):
Код:

For /F "Tokens=2*" %%A In ('Systeminfo^|Find /i "Название ОС"') Do Set Edition=%%B

Цитата:

Цитата Iska
Где брали сам список CID'ов? »

Iska, я брал отсюда. Еще есть KB941461

Iska 12-04-2011 20:05 1656708

El Sanchez, спасибо, ясно.

sov44 12-04-2011 21:03 1656760

El Sanchez, слепил файлик по вашим скриптам. Ещё раз СПАСИБО!

sov44 14-04-2011 08:44 1657916

El Sanchez, можно ли модернизировать скрипт в посте 11, чтобы он верно определял ключ как Windows XP, так и Windows 7 ?
п.с. при применении скрипта ключи Windows 7 определяются как ВВВВВ-ВВВВВ-ВВВВВ-...

El Sanchez 14-04-2011 14:40 1658207

Цитата:

Цитата sov44
при применении скрипта ключи Windows 7 определяются как ВВВВВ-ВВВВВ-ВВВВВ-... »

sov44, скрипт рабочий и проверялся на Win7 x64, только нужно запускать его по-другому - от имени пользователя, вошедшего в систему. Т.е. Shift + ПКМ на скрипте, выбрать Запуск от имени другого пользователя..., вбить данные пользователя.

Не знаю почему, но DigitalProductId в реестре (да и много еще чего в HKLM) не виден через reg, regedit, даже если запустить их от имени Администратора.
З.Ы. UAC у меня отключен. При включенном, вроде, работает от имени Администратора.

Iska 14-04-2011 19:06 1658410

sov44, повторюсь ещё раз: на Vista+ параметра в реестре может и не быть.

zero55 14-04-2011 21:22 1658502

вот этот метод не подойдет?

sov44 14-04-2011 22:46 1658559

Цитата:

Цитата El Sanchez
Не знаю почему, но DigitalProductId в реестре (да и много еще чего в HKLM) не виден через reg, regedit, даже если запустить их от имени Администратора. »

Да, полтергейст какой-то. К примеру скрипт по определению сервиспака на ХР работает. На Windows 7 в виртуальной машине (SP1, админ, таблэтка) не работает, но в тоже время ключ установки определяет нормально. Параметр CSDVersion присутствует в обеих осях.
Код:

@echo off
For /F "Skip=4 Tokens=3 delims=        " %%A In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V CSDVersion 2^>nul') Do Set Serv=%%A
echo %Serv%
pause


Iska 14-04-2011 23:28 1658586

Цитата:

Цитата sov44
Параметр CSDVersion »

???

sov44 15-04-2011 11:37 1658857

Цитата:

Цитата Iska
??? »

Цитата:

Цитата sov44
На Windows 7 ...(SP1 .....)... Параметр CSDVersion присутствует в обеих осях. »


Iska 15-04-2011 13:33 1658959

sov44, я имел в виду, что речь идёт о параметре «DigitalProductId», а не о «CSDVersion».


Время: 17:54.

Время: 17:54.
© OSzone.net 2001-