Поговорим о проверке валидности программных лицензий 1С.
Содержание
Небольшая вводная часть
В данной записи ничего не будет про аппаратные лицензии, они у меня встречаются редко. Да и, вроде, как их уже не выпускают.
Программная лицензия 1С привязывается к железу на котором она активируется. И может «слететь», если один или несколько параметров компьютера измениться.
Параметры к которым привязываются лицензии:
-
наименование операционной системы;
-
версия операционной системы (для ОС Windows анализируются только первые две цифры номера версии);
-
серийный номер операционной системы (только в случае ОС Windows);
-
дата установки операционной системы (только в случае ОС Windows);
-
сетевое имя компьютера;
-
модель материнской платы;
-
объём оперативной памяти (вот в это я не верю);
-
тип и версия BIOS (в это тоже);
-
список процессоров и их параметры;
-
список сетевых адаптеров и их MAC-адреса;
-
список жестких дисков и их параметры.
То есть фактически нам хватит неаккуратных действий с рабочим местом, где лицензия и она отвалиться.
Если мы говорим про лицензию на рабочем месте, то тут довольно все просто и понятно будет из ошибки, которая выскакивает при запуске.
Но если мы говорим о лицензии на терминальном сервере, то тут уже может быть сразу и не понять. Очень часто встречается, что лицензии 1С докупаются постепенно, под расширение штата. То 5 докупят, то 1. Так этот снежный ком и копиться.
Ручная проверка
К сожалению, я не нашел удобного инструмента, который мог бы сразу показать состояние лицензий на сервере. Но есть такая утилита ring, которая позволяет: посмотреть список установленных лицензий, проверить LicData и проверить валидность установленной лицензии.
Все необходимые компоненты тут: по ссылке
Устанавливаем Java
Устанавливаем, прописываем переменные окружения (Этот компьютер – Свойства – Дополнительные параметры системы)
JAVA_HOME = «C:\Program Files\Java\jre-1.8» (без кавычек)
Для проверки, что Java встала нормально открываем командную строчку и пишем
1 |
java -version |
Если в ответ мы увидим, что Java вернула нам версию, значит все встало ок. Если ошибка «Java не является исполнительным файлов», то скорее всего придется перезагрузить сервер.
Распакуем 1c_enterprise_license_tools_0.15.0_2_windows_x86_64.zip в C:\Distr\
Из командной строчки запускаем установку
1 |
C:\Distr\1ce-installer.cmd |
Никакие параметры не меняем и получаем такую картину
Все дальнейшие действия будут командой строки
Переходим в директорию, где расположена наша утилита Ring
1 |
cd "C:\Program Files\1C\1CE\components\1c-enterprise-ring-0.19.5+12-x86_64" |
Вывод списка файлов лицензий
1 |
ring license list |
Пример вывода
Информация о владельце лицензии (расшифровка LicData)
Под звёздочками берется информация из прошлого шага
1 |
ring license info --name ************-********* |
Валидация лицензии (проверка привязки лицензии к компьютеру)
1 |
ring license validate --name ***************-*************** |
Пример вывода
Если все хорошо
Полуавтоматическая проверка
Проверка валидности лицензий
И так, руками мы научились проверять лицензии. Но перебирать это все руками, как по мне это маразам. Неудобно, что-то пропустишь да и вообще.
Поэтому под себя я написал небольшой скрипт для проверки лицензий.
Предполагается, что все нужные компоненты стоят: Java и Ring.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# Путь к утилите ring. $ringPath = "C:\Program Files\1C\1CE\components\1c-enterprise-ring-0.19.5+12-x86_64\ring.cmd" # Проверяем, существует ли утилита ring if (-not (Test-Path $ringPath)) { Write-Host "Утилита ring не найдена по пути $ringPath" -ForegroundColor Red exit } # Функция очистка элемента массива от ненужных данных function Clean-String { param ( [string]$inputString ) $cleanedString = $inputString -split ' ' | Select-Object -First 1 return $cleanedString } # Запускаем ring и получаем вывод $output = & $ringPath license list # Формируем массив для разделения строчек $license = $output -split "`n" # Получаем количество длинны массива, оно же количество лицензий $license_quantity = $license.Length # Вывод количества лицензий Write-Host "Количество лицензий: $license_quantity" # Убираем лишнее из строки и проверяем валидность лицензии foreach ($item in $license) { $cleanedItem = Clean-String -inputString $item & $ringPath license validate --name $cleanedItem } |
Пример вывода
Расшифровка LicData
Тот же самый скрипт можно немного переписать и сразу получить расшифрованные файлы LicData. Это бывает полезно при перенесе лицензий.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
$ringPath = "C:\Program Files\1C\1CE\components\1c-enterprise-ring-0.19.5+12-x86_64\ring.cmd" # Проверяем, существует ли утилита ring if (-not (Test-Path $ringPath)) { Write-Host "Утилита ring не найдена по пути $ringPath" -ForegroundColor Red exit } # Функция очистка элемента массива от ненужных данных function Clean-String { param ( [string]$inputString ) $cleanedString = $inputString -split ' ' | Select-Object -First 1 return $cleanedString } # Запускаем ring и получаем вывод $output = & $ringPath license list # Формируем массив для разделения строчек $license = $output -split "`n" # Получаем количество длинны массива, оно же количество лицензий $license_quantity = $license.Length # Вывод количества лицензий Write-Host "Количество лицензий: $license_quantity" #Расшифровка файлов Lic foreach ($item in $license) { #Вызов функции очистки строчки для корректной работы ring $cleanedItem = Clean-String -inputString $item #Расшифровываем каждую лицензию $LicData = & $ringPath license info --name $cleanedItem #Формируем название файла $fileName = "$cleanedItem.txt" $filePath = Join-Path -Path "C:\ProgramData\1C\licenses" -ChildPath $fileName $LicData | Out-File -FilePath $filePath Write-Output "Лицензия сохранена: $filePath" } #Откроем папку с файлами ii "C:\ProgramData\1C\licenses" |
Пример вывода