How To Reset 120 Day Grace Period on Server RDS — The Steps

Fredrick Sachita
2 min readOct 6, 2020

--

Note: RDS(Remote Desktop Services)

Option 1: Using GUI

Step 1: Win key + R

Step 2: Type in regedit and click ok

Step 3: Navigate to this folder path

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod

Step 4: Delete the REG_BINARY

Step 5: Restart the Server for changes to take effect(For grace period to be restored back to 120 Days)

Option 2: Remote desktop license reset grace period to 120 days through PowerShell script (Note: Does not require restarting the host server as in option one for changes to take effect)

## This Script is intended to be used for Querying remaining time and resetting Terminal Server (RDS) Grace Licensing Period to Default 120 Days.

Clear-Host

$ErrorActionPreference = “SilentlyContinue”

## Display current Status of remaining days from Grace period.

$GracePeriod = (Invoke-WmiMethod -PATH (gwmi -namespace root\cimv2\terminalservices -class win32_terminalservicesetting).__PATH -name GetGracePeriodDays).daysleft

Write-Host -fore Green ======================================================

Write-Host -fore Green ‘Terminal Server (RDS) grace period Days remaining are’ : $GracePeriod

Write-Host -fore Green ======================================================

Write-Host

$Response = Read-Host “Do you want to reset Terminal Server (RDS) Grace period to Default 120 Days ? (Y/N)”

if ($Response -eq “Y”) {

## Reset Terminal Services Grace period to 120 Days

$definition = @”

using System;

using System.Runtime.InteropServices;

namespace Win32Api

{

public class NtDll

{

[DllImport(“ntdll.dll”, EntryPoint=”RtlAdjustPrivilege”)]

public static extern int RtlAdjustPrivilege(ulong Privilege, bool Enable, bool CurrentThread, ref bool Enabled);

}

}

“@

Add-Type -TypeDefinition $definition -PassThru

$bEnabled = $false

## Enable SeTakeOwnershipPrivilege

$res = [Win32Api.NtDll]::RtlAdjustPrivilege(9, $true, $false, [ref]$bEnabled)

## Take Ownership on the Key

$key = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey(“SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod”, [Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,[System.Security.AccessControl.RegistryRights]::takeownership)

$acl = $key.GetAccessControl()

$acl.SetOwner([System.Security.Principal.NTAccount]”Administrators”)

$key.SetAccessControl($acl)

## Assign Full Controll permissions to Administrators on the key.

$rule = New-Object System.Security.AccessControl.RegistryAccessRule (“Administrators”,”FullControl”,”Allow”)

$acl.SetAccessRule($rule)

$key.SetAccessControl($acl)

## Finally Delete the key which resets the Grace Period counter to 120 Days.

Remove-Item ‘HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod’

write-host

Write-host -ForegroundColor Red ‘Resetting, Please Wait….’

Start-Sleep -Seconds 10

}

Else

{

Write-Host

Write-Host -ForegroundColor Yellow ‘**You Chose not to reset Grace period of Terminal Server (RDS) Licensing’

}

## Display Remaining Days again as final status

tlsbln.exe

$GracePost = (Invoke-WmiMethod -PATH (gwmi -namespace root\cimv2\terminalservices -class win32_terminalservicesetting).__PATH -name GetGracePeriodDays).daysleft

Write-Host

Write-Host -fore Yellow =====================================================

Write-Host -fore Yellow ‘Terminal Server (RDS) grace period Days remaining are’ : $GracePost

Write-Host -fore Yellow =====================================================

## Cleanup of Variables

Remove-Variable * -ErrorAction SilentlyContinue

Using CMD(Command Prompt)

Recommendation: This process should be initiated at least 5 days before the initial period ends.

--

--

Fredrick Sachita
Fredrick Sachita

Written by Fredrick Sachita

Solutions Architect | Certified Gogle Cloud, Microsoft Azure,AWS

No responses yet