Короткий ответ
Сеансовый хост должен знать лицензионный сервер и режим (Per User или Per Device), совпадающий с купленными CAL. Проверьте службу RD Licensing, публикацию в AD, DNS имени сервера, время, затем выдачу CAL. Административные два сеанса на сервере без роли Session Host — не эта статья.
Обход лицензий, сброс grace неофициальными скриптами, «обнуление журнала лицензий» — не решение и здесь не разбираются. Покупается и активируется CAL, чинится discovery.
Симптомы и как отличить
- Пользователи RDS: сообщение про лицензирование / внутренний ID, админ по консоли входит.
- Event 1130/1131 на Session Host: нет license server или grace.
- Licensing Diagnoser в Server Manager красный.
| Симптом | Куда |
|---|---|
| Нет TCP 3389 | RDP недоступен |
| TermService Stopped | служба |
| Только после KB | патч |
| Не резолвится имя license server | DNS |
Возможные причины
- Не задан license server / режим на Session Host (GPO или Server Manager).
- Служба
TermServLicensingStopped, БД лицензий недоступна. - Сервер не активирован в Microsoft Clearinghouse.
- Режим Per Device, а CAL — Per User (и наоборот).
- Session Host не в той доменной группе, license server не публикует себя в AD.
- Firewall до license server (RPC), Dual NIC, старый FQDN.
- Часы разъехались — активация/выдача CAL чудит.
- CAL другой версии ОС (не покрывают 2022/2025).
Диагностика
На Session Host:
Get-WindowsFeature RDS-Licensing, RDS-RD-Server | Format-Table Name, InstallState
Get-CimInstance -ClassName Win32_TerminalServiceSetting -Namespace root\cimv2\TerminalServices |
Format-List LicensingType, LicenseServer, TerminalServerModeLicensingType: 2 Per Device, 4 Per User (значения смотрите на вашей сборке в выводе; ориентир — оснастка, не заучивание цифр вслепую).
Test-NetConnection DC01.contoso.example -Port 135
Get-Service TermService, TermServLicensing -ErrorAction SilentlyContinueНа сервере лицензий:
Get-Service TermServLicensing
Get-WinEvent -LogName 'Microsoft-Windows-TerminalServices-Licensing/Admin' -MaxEvents 30 |
Format-Table TimeCreated, Id, Message -WrapRD Licensing Manager: сервер Activated, CAL установлены, тип совпадает. Публикация:
Get-ADObject -Filter "objectClass -eq 'rTSLicenseServer'" -SearchBase 'CN=Configuration,DC=contoso,DC=example' -ErrorAction SilentlyContinueЕсли командлет/класс пуст — смотрите оснастку «Review Configuration» (должен быть в домене, член Terminal Server License Servers).
DNS:
Resolve-DnsName ls01.contoso.example
w32tm /query /statusРешение
Сценарий A. Не заданы сервер и режим
GPO: Computer Configuration → Administrative Templates → Windows Components → Remote Desktop Services → RD Session Host → Licensing.
Либо (после проверки текущих значений):
$ts = Get-WmiObject -Class Win32_TerminalServiceSetting -Namespace root\cimv2\TerminalServicesДальше — штатная оснастка или документированные методы роли, не сторонние «fix licensing.bat».
Перезапуск TermService в окно сеансов.
Сценарий B. License server не активирован / нет CAL
Активируйте сервер штатным мастером (телефон/веб). Установите пакет CAL того типа и версии, что куплены. Не подсовывайте CAL от чужой организации.
Сценарий C. Per User vs Per Device
Выровняйте режим хоста и CAL. Per User в домене требует, чтобы license server был членом домена и видел AD; отчёты Per User — не «жетоны на устройстве».
Сценарий D. Discovery
Добавьте Session Host в группу, которую license server принимает; проверьте DNS и RPC. Firewall: не «выключить», а разрешить RD Licensing между хостами.
Сценарий E. Что смотреть в Diagnoser и AD
Licensing Diagnoser на Session Host должен показать имя ls01.contoso.example, режим, совпадающий с GPMC, и доступность RPC. Если Diagnoser пишет «не найден», сначала DNS и членство сервера лицензий в группе Terminal Server License Servers, затем firewall между хостом и LS.
Resolve-DnsName ls01.contoso.example
Test-NetConnection ls01.contoso.example -Port 135
Get-Service TermServLicensing -ComputerName ls01Per User: учётки должны читаться в AD, license server в домене. Рабочая группа + Per User — частый тупик; не лечится «хаком grace». Per Device: CAL привязывается к устройству; клоны VM с одним SID/именем съедают пул и выглядят как «лицензии кончились».
Версия CAL должна покрывать версию Session Host по правилам Microsoft (CAL той же или новее ОС). CAL 2019 на хост 2025 не «добавить галкой». После апгрейда фермы докупают/обновляют CAL, не отключают licensing policy.
Время на LS и хостах — в пределах Kerberos; см. рассинхрон. Активация сервера лицензий через Clearinghouse требует исходящей связи в окно активации, не постоянного «открытого интернета».
Как проверить, что проблема устранена
Licensing Diagnoser без красного. Новый тестовый пользователь (Per User) или тестовое устройство (Per Device) входит на Session Host. Event 1130 нет в свежих событиях. Пользовательский RDP, не только консоль.
Get-Service TermServLicensing, TermService
quserЕсли не помогло
- Хост в рабочей группе: Per User в AD-модели ограничен — читайте актуальную документацию Microsoft для вашей версии, не форумный обход.
- Старые CAL не покрывают версию Session Host — нужны CAL той же или новее согласно правилам Microsoft.
- Время/DNS — сначала они.
- Сообщение есть у админского RDP без роли RDS — вы не в этой статье.
Профилактика
- License server — отдельный, backup конфигурации лицензий.
- Мониторинг службы и срока CAL.
- Документированный режим (User/Device) в runbook.
- Два Session Host не должны указывать на мёртвое имя.
- Совпадение версии CAL и ОС перед апгрейдом 2019→2022/2025.
FAQ
Можно ли продлить grace переустановкой RDS?
Это обход лицензирования. Не делайте. Ставьте CAL.
Почему Per User «не отнимает» CAL в оснастке как Device?
Per User учитывается иначе (отчёты, AD). Пустая колонка Device не значит, что лицензия не нужна.
Нужен ли license server на каждом Session Host?
Нет. Один (лучше с backup-процедурой) на ферму. Хосты на него указывают.
LicensingType в WMI не совпал с GPMC?
Побеждает эффективная политика. Смотрите RSOP computer, не только локальную оснастку.
Пользователь не в AD, только локальные учётки на Session Host?
Тогда модель CAL и discovery другие; всё равно нужны легальные CAL, не «выключить licensing provider».