Скрипт для проверки активации windows и office через GPO

Рейтинг: 0Ответов: 1Опубликовано: 16.05.2023

Написал небольшой скрипт для проверки активирован office и windows и если нет то выполнить активацию на собственном KMS. не могу понять в чем проблема активация windows отрабатывает правильно, но как только доходит до Office сразу выкидывает из скрипта!

   @echo off
for /f "tokens=2 delims==" %%k in ('"wmic path SoftwareLicensingProduct where (name like "%%windows%%") get LicenseStatus /value | findstr "1" || findstr "0""') do (
set licenseWindows=%%k
)
IF %licenseWindows% EQU 0 (
Slmgr /skms 192.168.0.13 && Slmgr /ato
)
for /f "tokens=2 delims==" %%j in ('"wmic path SoftwareLicensingProduct where (name like "%%office%%") get LicenseStatus /value | findstr "1" || findstr "0""') do (
set licenseOffice=%%j
)
IF %licenseOffice% EQU 0 (
setlocal enabledelayedexpansion
for /f "tokens=3 delims=." %%a in ('reg query "HKEY_CLASSES_ROOT\Word.Application\CurVer"') do(
set version=%%a
)
IF %version% GEQ 10 (
cscript "%programfiles%\Microsoft Office\Office%version%\ospp.vbs" /sethst:192.168.0.13
cscript "%programfiles%\Microsoft Office\Office%version%\ospp.vbs" /act
))

Ответы

▲ 1Принят

Проблема возникает из-за неправильного использования переменной %version% в условии IF %version% GEQ 10. В командной строке оператор IF сравнивает строки лексикографически, а не численно. Поэтому в случае версии "10" она будет считаться меньше, чем версия "9", поскольку первый символ "1" имеет меньший код ASCII, чем первый символ "9". Чтобы решить эту проблему, нужно изменить подход к сравнению версии. Вот исправленный фрагмент кода:

setlocal enabledelayedexpansion
for /f "tokens=3 delims=." %%a in ('reg query "HKEY_CLASSES_ROOT\Word.Application\CurVer"') do (
  set version=%%a
)
IF !version! GEQ 10 (
  cscript "%programfiles%\Microsoft Office\Office!version!\ospp.vbs" /sethst:192.168.0.13
  cscript "%programfiles%\Microsoft Office\Office!version!\ospp.vbs" /act
)