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

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

angel_lyucifer 13-02-2013 00:10 2089152

Батник который бы определял состояние активации виндовс
 
Привет, нужен универсальный батник который бы определял состояние активации виндовс если система активирована тогда запустить файл 1.ехе а если система не активирована тогда запустить файл 2.ехе.

Нет это не связано с активацией, я пишу не большую программу для людей с ограниченными возможностими.
Если система активирована тогда будет одно определённое голосовое оповещение а если система не активирована тогда будет другое голосовое определённое оповещение...

Помогите пожалуйста.

Gen_prot 23-03-2013 19:04 2117001

думаю что то вроде
Код:

:: запишем вывод команды проверки лицензии в файл
cscript %windir%\system32\slmgr.vbs -xpr >win_act.txt
:: поищем "Постоянная активация прошла успешно."
Find /C "успешно" win_act.txt
:: не нашли, то запустить Finish1
If ErrorLevel 1 Call Finish1.CMD
:: иначе
If ErrorLevel 0 Call Finish2.CMD


angel_lyucifer 24-03-2013 13:27 2117316

PHP код:

:: запишем вывод команды проверки лицензии в файл 
cscript 
%windir%system32slmgr.vbs -xpr >win_act.txt 
:: поищем "Постоянная активация прошла успешно."
Find /"успешно" win_act.txt  
:: не нашлито запустить Finish1 
If ErrorLevel 1 Call Finish1.CMD  
:: иначе
If ErrorLevel 0 Call Finish2.CMD 

В моей os нет такого скрипта slmgr.vbs...

Foreigner 24-03-2013 15:09 2117392

angel_lyucifer, В общем случае можно так:
Код:

wmic path SoftwareLicensingProduct get licensestatus | 1>nul findstr "1" && echo Licensed || echo Not Licensed
Подробнее

sov44 24-03-2013 17:51 2117528

Foreigner, можно написать универсальный код для определения статуса активации Windows XP \ Windows7 ?

Foreigner 24-03-2013 18:38 2117557

sov44, Не знаю будет работать или нет:
Код:

@echo off
setlocal

for /f %%i in (' wmic os get version /value ') do 1>nul set "%%i"

if %version% gtr 5.3 (

    wmic path SoftwareLicensingProduct get LicenseStatus | 1>nul findstr "1" && echo Licensed || echo Not Licensed

) else (

    wmic path Win32_WindowsProductActivation get ActivationRequred | findstr "0" && echo Licensed || echo Not Licensed

)

ЗЫ. В ХР Номе работать не будет точно, если пользователь не установит wmic

Dragokas 24-03-2013 23:19 2117773

Foreigner, пропустили букву i (Required)
Код:

wmic path Win32_WindowsProductActivation get ActivationRequired | findstr "0" && echo Licensed || echo Not Licensed

Dragokas 26-03-2013 02:19 2118605

%version% gtr 5.3

Как это работает?

Сравнение по кодовой таблице символов?

mammuthus 22-05-2015 10:33 2510117

Как можно вывести в консоль ключ активации, если винда активирована?
И можно ли как-нибудь проверить активацию msoffice таким же методом?

greg zakharov 22-05-2015 12:20 2510161

Цитата:

Цитата mammuthus
Как можно вывести в консоль ключ активации, если винда активирована?

Например, так:
Код:

@set @pk=0 /*
  @echo off
    set @pk=
    cscript /nologo /e:jscript "%~f0" "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId"
  exit /b
*/

(function(key) {
  var i, j, res = '',
      map = 'BCDFGHJKMPQRTVWXY2346789'.split('');
     
  with (new ActiveXObject('WScript.Shell')) {
    key = RegRead(key).toArray().slice(52, 67);
  }
 
  for (i = 24; i >= 0; i--) {
    var k = 0;
    for (j = 14; j >= 0; j--) {
      k = (k << 8) + key[j];
      key[j] = (k / 24) & 255;
      k %= 24;
    }
    res = map[k] + res;
    if ((i % 5) === 0 && i !== 0) res = '-' + res;
  }
 
  WScript.echo(res);
}(
  WScript.Arguments.length !== 1
  ? WScript.Quit(1)
  : WScript.Arguments.Unnamed(0)
));

Цитата:

Цитата mammuthus
И можно ли как-нибудь проверить активацию msoffice таким же методом?

Можно. Можно даже в WMI не лезть, так как DigitalProductId содержит все необходимые сведения - чай ведь структура данных об активации продукта m$.

greg zakharov 26-05-2015 12:02 2511479

В общем виде более детальная информация об активации (берется из значений DigitalProductId и DigitalProductId4, некоторые из полей структур отправлены в /dev/null).
Код:

@set @lic=0 /*
  @echo off
    set @lic=
    cscript /nologo /e:jscript "%~f0"
  exit /b
*/

(function() {
  Array.prototype.getString = function(b, e) {
    return String.fromCharCode.apply(null, this.slice(b, e));
  }
 
  Array.prototype.getCdKey = function(b, e) {
    var i, j, key = '', raw = this.slice(b, e),
        map = 'BCDFGHJKMPQRTVWXY2346789'.split('');
   
    for (i = 24; i >= 0; i--) {
      var k = 0;
      for (j = 14; j >= 0; j--) {
        k = (k << 8) + raw[j];
        raw[j] = (k / 24) & 255;
        k %= 24;
      }
      key = map[k] + key;
      if ((i % 5) === 0 && i !== 0) key = '-' + key;
    }
   
    return key;
  }
 
  Array.prototype.getUString = function(b, e) {
    var arr = this.slice(b, e);
   
    for (var i = 0; i < arr.length; i++) {
      if (arr[i] === 0) arr.splice(i, 1);
    }
   
    return String.fromCharCode.apply(null, arr);
  }
 
  var key = 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\DigitalProductId',
      dpi, dpi4;
 
  try {
    with (new ActiveXObject('WScript.Shell')) {
      dpi = RegRead(key).toArray();
      dpi4 = RegRead(key + 4).toArray();
    }
   
    WScript.echo('ProductId    : ' + dpi.getString(9, 31));
    WScript.echo('EditionId    : ' + dpi.getString(36, 45));
    WScript.echo('CdKey        : ' + dpi.getCdKey(52, 67));
    WScript.echo('AdvancedId  : ' + dpi4.getUString(8, 135));
    WScript.echo('ActivationId : ' + dpi4.getUString(136, 263));
    WScript.echo('EditionType  : ' + dpi4.getUString(280, 600));
    WScript.echo('KeyType      : ' + dpi4.getUString(1016, 1143));
    WScript.echo('EULA        : ' + dpi4.getUString(1144, 1272));
  }
  catch (e) {
    WScript.echo(e.message);
  }
}());

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

greg zakharov 28-05-2015 13:03 2512292

Вложений: 1
Напоследок (может кому пригодится). Набросал на Си консольное приложение pk.exe (от product key). Если закинуть в одну из директорий переменной %path% удобно дампить данные об активации из батников. Например:
Код:

@echo off
  setlocal
    for /f "tokens=2* delims=:" %%i in (
      'pk ^| findstr /i eula'
    ) do set "eula=%%i"
    echo %eula: =%
  endlocal
exit /b

В архиве помимо прочего описание структур DigitalProductId и DigitalProductId4.


Время: 13:11.

Время: 13:11.
© OSzone.net 2001-