Как сбросить grace period TS Windows Server 2008 R2

ВНИМАНИЕ: Все, что делается ниже на свой собственный страх и риск, сперва оттестируйте на тестовой системе, а после если все хорошо на боевой.

Когда поднимается терминальный сервер в организации, то как я вижу нет нужны сразу же его активировать можно использовать дефолтные 120 дней. Или же в организации просто нет денег или руководство считает, что в мире информационных технологий платить за что-то не приносящее материального дохода – это пустая трата денег. Вот в этом случае я хочу рассмотреть так называемую чистку определенного ключа реестра ответственного за данный Grace Period

На заметку: Все дальнейшие действия выполняются на любой учетной записи, которая включена в группу локальных администраторов системы, а также строки в консоли командной строки выполняются с применением «Запуск от имени администратора»

Шаг №1: Сервер на базе Windows Server 2008 R2 Std SP1 развернут из образа успешно составленного с применением файла ответов заметки или же Вы можете его установить просто из образа скачанного с Microsoft Volume License Service смотря как принято у Вас.

Шаг №2: Далее поднята роль Терминального сервера

Как развернуть терминальный сервер на базе Windows Server 2008 R2

Шаг №3: Сейчас терминальный сервер если он не активирован работает в режиме Grace Period (Льготный период/Тестовый период) сроком на 120 дней об этом говорит всплывающее окно в правом нижнем углу экрана как если Вы зашли на него локального или через RDP-сеанс:

«No Remote Desktop license server is specified.

Remote Desktop Services will stop working in 119 days if a license server is not specified.

Click this message to launch the RD Session Host Server Configuration tool to specify a license server for the RD Session Host server to use.”

Шаг №4: Чтобы узнать количество дней до окончания тестового период с целью, как ввода лицензий или сброса на опять 120 дней использования.

Поиск по документации сайта Microsoft (https://docs.microsoft.com/en-us/windows/win32/termserv/win32-terminalservicesetting)

От 07.10.2020 — ссылка ведет в никуда, поэтом качаю ее из своего хранилища необходимых файлов к заметкам отсюда.

вывел меня на class: win32_terminalservicesetting и его метод: GetGracePeriodDays

Start – All Programs – Accessories – и через правый клик мышью на «Command Prompt” выбираю «Run as administrator”, затем следующая команда:

Синтаксис использования wmic: wmic /namespace:\\root\<namespace> path <class name>  get <attributes>

1234567891011121314151617C:\Users\Administrator>wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays Executing (\\SRV-TS\root\CIMV2\TerminalServices:Win32_TerminalServiceSetting.ServerName=”SRV-TS”)->getgraceperioddays() Method execution successful. Out Parameters: instance of __PARAMETERS { DaysLeft = 119; ReturnValue = 0; };

Ну а чтобы через одну длинную команду получить количество дней до окончания тестового периода использования терминального сервера:

123C:\Users\Administrator>wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays | findstr /I “DaysLeft” DaysLeft = 119;

Если нужно определить сколько дней осталось на удаленном хосте, то команда обращения через утилиту wmic выглядит:

123C:\Users\olloa>wmic /node:”srv-ts2″ /user:”olloa” /password:”<domain_password>” /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays | findstr /I “DaysLeft” DaysLeft = 89;

Где сервер srv-ts2 – это система на базе Windows Server 2012 R2 Standard, а вот почему с Windows Server 2008 R2 Std SP1 у меня информация не снимается:

12345C:\Users\olloa>wmic /node:”srv-ts10″ /user:”olloa” /password:”<domain_password>” /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays | findstr /I “DaysLeft” DaysLeft = 0; C:\Users\olloa>

Итак: у меня не доменный терминальные сервер, а на нем есть две учетные записи:

  • Одна Login: Administrator – это предустановленная и если под ней удаленно обратиться то информация снимается:
123C:\Users\olloa>wmic /node:”10.10.10.66″ /user:”Administrator” /password:”712mbddr@” /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays | findstr /I “DaysLeft” DaysLeft = 119;
  • Вторая Login: ekzorchik (созданная и добавленная в группу локальных администраторов) и если под ней удаленно обратиться, то информация не снимается пишет – «Отказано в доступе»
12345C:\Users\olloa>wmic /node:”10.10.10.66″ /user:”ekzorchik” /password:”712mbddr@” /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays | findstr /I “DaysLeft” ОШИБКА. Описание: Отказано в доступе.

В чем же причина?

Смотрю логи (Event View – Windows Logs – Application)  на srv-ts:

  • Log Name: Application
  • Source: WMI
  • Event ID: 5605
  • Description: The root\CIMV2\TerminalServices namespace is marked with the RequiresEncryption flag. Access to this namespace might be denied if the script or application does not have the appropriate authentication level. Change the authentication level to Pkt_Privacy and run the script or application again.

Дело в том, что если делать этот запрос локально на системе, то выполнится, а вот чтобы изменить уровень аутентификации для доступа к root\CIMV2. Нашел документ (https://docs.microsoft.com/en-us/windows/win32/wmisdk/setting-the-default-process-security-level-using-vbscript) по которому можно сделать скрипт:

1C:\Windows\system32>mkdir c:\test

Создаю VBS-скрипт, к примеру под именем: level.vbs

123strComputer = “srv-ts” Set objWMIService = GetObject(“winmgmts:{authenticationLevel=None}\\” & strComputer & “\root\CIMV2”)

Запускаю скрипт и скрипт выполнился без ошибок:

123C:\Windows\system32>cscript c:\test\level.vbs C:\Windows\system32>

Но лучше этого не делать, а пойти по пути наименьшего сопротивления:

  • Либо под административной учетной записью подключаться
  • Либо отключить UAC, перезагрузить компьютер и после команда wmic отработает как надо:

Проверяю со своей рабочей станции под управлением Windows 10 Pro что обратившись к терминальному серверу могу получить количество дней льготного использования терминального сервера:

123C:\Users\olloa>wmic /node:”10.10.10.66″ /user:”ekzorchik” /password:”712mbddr@” /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !=””) call getgraceperioddays | findstr /I “DaysLeft” DaysLeft = 119;

Шаг №5: Итак, вот вы используете терминальный сервер в триал режиме целых 120 дней, дни подходят к нулю, но вы не хотите вводить ключ лицензии, переустанавливать терминальный сервер тоже не вариант. Как быть в таком случае? На просторах интернета натыкался якобы на способ удаления определенного ключа реестра, но для этого требуется утилита subinacl.exe (скачиваю ее с сайта Microsoft: https://www.microsoft.com/en-us/download/confirmation.aspx?id=23510) копирую ее для удобства использования %systemroot%\system32)

Этап №1: Сохраняем права доступа для раздела реестра

1234567C:\Windows\system32>subinacl.exe /output=c:\test\grace.txt /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” Elapsed Time: 00 00:00:00 Done:        1, Modified        0, Failed        0, Syntax errors        0 Last Done  : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod

Для себя смотрю содержимое файл grace.txt, но содержимое для меня как китайская грамота.

Этап №2: Забираем владельца у ключа GracePeriod:

1234567891011C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /setowner=Administrators SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod : builtin\administrators is the new owner HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod : 1 change(s) Elapsed Time: 00 00:00:00 Done:        1, Modified        1, Failed        0, Syntax errors        0 Last Done  : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod

Этап №3: Устанавливаем полные права доступа на ключ реестра GracePeriod:

123456789101112131415C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /grant=Administrators=F SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod : delete Perm. ACE 2 builtin\administrators SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod : new ace for builtin\administrators HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod : 2 change(s) Elapsed Time: 00 00:00:00 Done:        1, Modified        1, Failed        0, Syntax errors        0 Last Done  : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod

Этап №4: Удаляем ключ ответственный за триал период в 120 дней

123C:\Windows\system32>reg delete “HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /v L$RTMTIMEBOMB_1320153D-8DA3-4e8e-B27B-0D888223A588 /f The operation completed successfully.

Этап №5: Возвращаем права доступа для раздела GracePeriod к тем когда делали бекап в «Этапе №1»:

1C:\Windows\system32>subinacl.exe /playfile c:\test\grace.txt

Лучше этого не делать, т.к. после потерял доступ к разделу GracePeriod и получаю сообщение при открытии разрешений:

  • Заголовок окна: Error Opening Key
  • Тело: GracePeriod cannot be opened. An error is preventing this key from being opened. Details: Access is denied.

Также по RDP к серверу. Чтобы восстановить доступ к серверу по RDP у меня заработало следующее:

  • Удалил роль терминального сервера
  • Перезагрузился
  • По RDP авторизовался.

Но посмотреть разрешения на раздел GracePeriod не могу через Regedit.exe

Раз у меня работают «Этап 2 & Этап 3” то применяю, получается, что есть права для администраторов. Попробую удалить данный раздел GracePeriod и заново разверну роль Терминального сервера. Раздел GracePeriod успешно создался, теперь смотрю права доступа чтобы из задокумментировать вручную:

  • Name: NETWORK SERVICE & SYSTEM
  • Apply to: This key only
  • Permissions:
Full ControlAllow
Query ValueAllow
Set ValueAllow
Create SubkeyAllow
Enumerate SubkeysAllow
NotifyAllow
Create LinkAllow
DeleteAllow
Write DACAllow
Write OwnerAllow
Read ControlAllow
  • Name: Administrators (SRV-TS\Administrators)
  • Apply to: This key only
  • Permissions:
Full Control-F
Query ValueApplyQ
Set Value-S
Create Subkey-C
Enumerate SubkeysApplyE
NotifyApplyY
Create Link-L
Delete-D
Write DAC-W
Write Owner-O
Read ControlApplyA
  • Owner (Владелец)
Текущий владелецNETWORK SERVICE

Так возвращаюсь к началу, в частности к Этапу №5:

12345C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /deny=Administrators= C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /grant=Administrators=QEYA C:\Windows\system32>subinacl.exe  /subkeyreg “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod” /setowner=”NETWORK SERVICE”

Этап №6: Перезагружаю систему для последующего использования терминального сервера:

1C:\Windows\system32>shutdown /r /t 3

И у меня снова 120 дней тестового использования терминального сервера, а такой трюк можно проделывать не один раз, получается компания Microsoft создала, а люди нашли как бы багу и теперь ее пользуются. Такое решение применимо к тем организациям и личному использованию в рамках ответственности за принятое решение идти по пути не лицензирования. Итого заметка работоспособна. На этом я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.