CMD/BAT - Батник который бы определял состояние активации виндовс

Аватара пользователя
angel_lyucifer

CMD/BAT - Батник который бы определял состояние активации виндовс

Сообщение angel_lyucifer »

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



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

Если система активирована тогда будет одно определённое голосовое оповещение а если система не активирована тогда будет другое голосовое определённое оповещение...



Помогите пожалуйста.
Аватара пользователя
Gen_prot

Re: CMD/BAT - Батник который бы определял состояние активации виндовс

Сообщение Gen_prot »

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



Код:

Код: Выделить всё

:: запишем вывод команды проверки лицензии в файл
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
Аватара пользователя
greg zakharov

Re: CMD/BAT - Батник который бы определял состояние активации виндовс

Сообщение greg zakharov »

В общем виде более детальная информация об активации (берется из значений 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);
  }
}());

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

Re: CMD/BAT - Батник который бы определял состояние активации виндовс

Сообщение angel_lyucifer »

PHP код:

Код: Выделить всё

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






В моей os нет такого скрипта slmgr.vbs...
Аватара пользователя
Foreigner

Re: CMD/BAT - Батник который бы определял состояние активации виндовс

Сообщение Foreigner »

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



Код:

Код: Выделить всё

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

Подробнее
Аватара пользователя
sov44

Re: CMD/BAT - Батник который бы определял состояние активации виндовс

Сообщение sov44 »

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

Re: CMD/BAT - Батник который бы определял состояние активации виндовс

Сообщение Foreigner »

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

Re: CMD/BAT - Батник который бы определял состояние активации виндовс

Сообщение Dragokas »

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



Код:

Код: Выделить всё

wmic path Win32_WindowsProductActivation get ActivationRequired | findstr "0" && echo Licensed || echo Not Licensed
Аватара пользователя
Dragokas

Re: CMD/BAT - Батник который бы определял состояние активации виндовс

Сообщение Dragokas »

%version% gtr 5.3



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



Сравнение по кодовой таблице символов?
Аватара пользователя
Dragokas

Re: CMD/BAT - Батник который бы определял состояние активации виндовс

Сообщение Dragokas »

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

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

Вернуться в «Скриптовые языки администрирования Windows»