При наведении порядка в ИТ-инфраструктуре компании системные администраторы часто сталкиваются с ситуацией, когда в окне «О программе» отображаются «лишние» или устаревшие программные лицензии. Проблема усугубляется, если в сети работает множество компьютеров (часть из которых находится вне домена), а лицензии активировались локально на рабочих станциях пользователей, а не на сервере «1С». Через стандартную консоль администрирования сервера такие лицензии увидеть невозможно.
В этой статье мы подробно разберем, как устроена система хранения лицензий «1С», как отличить реальные файлы лицензий от исторических записей в базе данных и какими методами можно автоматизировать их поиск на множестве компьютеров в сети.
Прежде чем приступать к поискам физических файлов на дисках пользователей, давайте проанализируем, откуда платформа «1С» берет информацию для окна «О программе». В этом окне данные о лицензировании разделены на несколько секций. Разберем их подробнее:
*.lic на компьютере пользователя. Эта информация всегда актуальна.Важный вывод: Если вы видите «левую» организацию или устаревшую лицензию в разделах «Информационная база» или «Конфигурация», это вовсе не означает, что файл лицензии физически присутствует на одном из компьютеров прямо сейчас. Это может быть лишь исторический след. Искать физические файлы имеет смысл только для тех лицензий, которые реально задействованы в текущих сеансах.
Если мы установили, что лицензия действительно активна и используется, нам нужно знать, где именно на компьютерах пользователей платформа сохраняет файлы с расширением *.lic. Платформа «1С:Предприятие» ищет файлы лицензий в строго определенных директориях в следующем порядке:
1. Общие каталоги для всех пользователей системы:
%ProgramData%\1C\licenses (физический путь в операционных системах Windows 7/10/11: C:\ProgramData\1C\licenses). Это основное и наиболее распространенное место хранения, если активация выполнялась пользователем с правами администратора.C:\Program Files\1cv8\conf (или C:\Program Files (x86)\1cv8\conf для 32-битных версий).C:\Program Files\1cv8\8.3.22.1709\bin\conf.2. Профили конкретных пользователей (если у пользователя не было прав администратора при активации):
%AppData%\1C\licenses (физический путь: C:\Users\<Имя_Пользователя>\AppData\Roaming\1C\licenses).%AppData%\1C\1Cv82\conf.Обратите внимание: Путь к лицензиям может быть переопределен системным администратором в конфигурационном файле conf.cfg с помощью параметра ConfLocation.
Если в сети более 100 компьютеров, обходить каждый вручную или запускать тотальное сканирование дисков нерационально. Нам нужно максимально сузить список «подозреваемых» машин. Рассмотрим алгоритм действий:
Для программной выгрузки уникальных имен компьютеров из Журнала регистрации мы можем использовать следующий фрагмент кода на языке «1С»:
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ДатаНачала", НачалоГода(ТекущаяДата()));
ТаблицаИмен = Новый ТаблицаЗначений;
ТаблицаИмен.Колонки.Добавить("ИмяКомпьютера", Новый ОписаниеТипов("Строка"));
ВыгрузитьЖурналРегистрации(ТаблицаИмен, ПараметрыОтбора, "ИмяКомпьютера");
ТаблицаИмен.Свернуть("ИмяКомпьютера");
Для Каждого СтрокаКомпьютер Из ТаблицаИмен Цикл
Сообщить("Компьютер для проверки: " + СтрокаКомпьютер.ИмяКомпьютера);
КонецЦикла;
Для автоматизации процесса наведения порядка в доменной сети (Active Directory) мы можем использовать штатную утилиту лицензирования ring, которая поставляется вместе с платформой «1С» (находится в каталоге установки платформы, папка ExtDst).
Утилита ring позволяет программно взаимодействовать с подсистемой лицензирования. Рассмотрим основные команды:
ring license list — выводит список всех установленных на данном компьютере лицензий в формате ПИН_КОД-РЕГ_НОМЕР.ring license info --name <ИмяЛицензии> — показывает подробную регистрационную информацию (на кого оформлена, дата активации).ring license validate — проверяет валидность привязки лицензии к текущему железу компьютера.Мы можем написать PowerShell-скрипт, который будет распространяться через групповые политики (GPO) при запуске компьютеров. Скрипт будет искать файлы *.lic в стандартных путях, опрашивать утилиту ring и записывать результаты в единую сетевую папку, доступную для чтения всем компьютерам домена.
Рассмотрим пример такого PowerShell-скрипта:
# Путь к сетевой папке для сбора отчетов
$NetworkShare = "\\your-server\1C_Lic_Audit$"
$ComputerName = $env:COMPUTERNAME
$ReportFile = "$NetworkShare\$ComputerName.txt"
# Поиск файлов лицензий в стандартных путях
$LicensePaths = @(
"C:\ProgramData\1C\licenses",
"$env:APPDATA\1C\licenses"
)
$FoundLicenses = @()
foreach ($Path in $LicensePaths) {
if (Test-Path $Path) {
$Files = Get-ChildItem -Path $Path -Filter *.lic
foreach ($File in $Files) {
$FoundLicenses += "Файл: $($File.FullName), Изменен: $($File.LastWriteTime)"
}
}
}
# Если лицензии найдены, записываем отчет
if ($FoundLicenses.Count -gt 0) {
$ReportContent = "Компьютер: $ComputerName`r`n"
$ReportContent += "===================================`r`n"
foreach ($Lic in $FoundLicenses) {
$ReportContent += "$Lic`r`n"
}
Set-Content -Path $ReportFile -Value $ReportContent
}
Еще один профессиональный способ отслеживания источников получения лицензий — использование встроенного механизма Технологического журнала «1С». Мы можем настроить сбор событий лицензирования на рабочих станциях или на сервере приложений.
Для этого в каталоге настроек (например, C:\Program Files\1cv8\conf) необходимо создать файл конфигурации технологического журнала logcfg.xml со следующим содержимым:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\1c_logs\lic_events" history="168">
<event>
<eq property="Name" value="LIC"/>
</event>
<property name="all"/>
</log>
</config>
Событие LIC отвечает за любые действия, связанные с получением лицензий платформой. При запуске сеанса «1С» запишет в лог детальную информацию: имя файла *.lic, его сетевой или локальный путь, а также параметры ключа защиты, который был успешно применен. Проанализировав эти файлы логов, мы получим исчерпывающую картину без необходимости сканирования жестких дисков пользователей.
Если инфраструктура компании сильно распределена, компьютеры не объединены в домен, а часть сотрудников работает удаленно, существует максимально простой административный способ сопоставления лицензий и конкретных ПК.
Мы можем направить официальный запрос в Центр лицензирования «1С» по адресу электронной почты lic@1c.ru. Запрос должен быть отправлен от имени руководителя или ответственного лица с официального e-mail адреса организации, который привязан к личному кабинету ИТС или указывался при активации продуктов.
В письме необходимо указать:
В ответ служба поддержки пришлет официальный отчет (обычно в формате PDF или Excel), содержащий:
Имея на руках этот отчет, мы можем мгновенно сопоставить список активных пин-кодов с текущим парком компьютеров компании, найти «потерянные» лицензии и локализовать машины, на которых активированы не принадлежащие организации лицензии.
При аудите сети часто обнаруживаются старые следы использования эмуляторов ключей защиты (HASP), которые могут конфликтовать с легальными программными лицензиями и искажать информацию в окне «О программе».
Для компьютеров, находящихся в домене Active Directory, мы можем использовать утилиту удаленного выполнения команд PsExec.exe (из пакета PSTools от Microsoft Sysinternals) для очистки системы от нелегальных драйверов эмуляторов без непосредственного визита к пользователю. Для этого можно запустить удаленную командную строку и выполнить команды по удалению служб эмуляторов (например, loaddrv, vushle и др.), а также очистить соответствующие ветки системного реестра Windows.
Подводя итог, отметим, что наиболее эффективным подходом является комбинирование методов: сначала мы запрашиваем официальный отчет в Центре лицензирования «1С» для понимания общей картины, затем используем PowerShell-скрипты и Технологический журнал для локального поиска файлов на «подозрительных» компьютерах, и в завершение удаляем неактуальные лицензии и кэш.