Skip to main content

RDS host grace period reset 120 napra

Néha felmerül a probléma hogy az RDS szerverünkön a 120 napos grace period lejár, és nem tudunk belépni. Ez akkor kellemetlenebb ha nem rendelkezünk közvetlen hozzáféréssel a szerverhez (mint amilyen egy Cloud szolgáltató), így a registry GUI-n történő módosítása nem lehetséges. Erre lehet megoldás a következő PowerShell scrip, ami akár Run Commandként is futtatható egy Azure Virtual Machine esetén:

$ErrorActionPreference = "SilentlyContinue"

if (([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {

$GracePeriod = (Invoke-CimMethod -InputObject (Get-CimInstance -Namespace root/CIMV2/TerminalServices -ClassName Win32_TerminalServiceSetting) -MethodName GetGracePeriodDays).DaysLeft
Write-Host 'Terminal Server (RDS) grace period-ból hátralévő napjainak száma' : $GracePeriod

## Visszaállítja a Terminal Services Grace period-ját 120 napra

$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

## Engedélyezi a  SeTakeOwnershipPrivilege-t
$res = [Win32Api.NtDll]::RtlAdjustPrivilege(9, $true, $false, [ref]$bEnabled)

## A kulcs saját hatókörbe vétele
$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)

## Full control típusú hozzáférés engedélyezése a helyi adminisztrátor csoportnak a kulcson.
$rule = New-Object System.Security.AccessControl.RegistryAccessRule ("Administrators","FullControl","Allow")
$acl.SetAccessRule($rule)
$key.SetAccessControl($acl)

## A GracePeriod kulcs törlése, aminek hatására visszaáll a 120 napos idő.
Remove-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod'

write-host
Write-host -ForegroundColor Red 'Resetting, Please Wait....'
Start-Sleep -Seconds 10


## Újra lekérdezzük a hátralévő napok számát.
tlsbln.exe
$GracePost = (Invoke-CimMethod -InputObject (Get-CimInstance -Namespace root/CIMV2/TerminalServices -ClassName Win32_TerminalServiceSetting) -MethodName GetGracePeriodDays).DaysLeft
Write-Host
Write-Host 'Terminal Server (RDS) grace period-ból hátralévő napjainak száma' : $GracePost

Write-Host "FONTOS: Indítsd újra a service-t, vagy magát a szervert hogy a változtatás életbe lépjen"
}Else
{
    Write-host "Futtasd a PowerShell-t adminisztrátori jogosultsággal!"
}
## Cleanup of Variables
Remove-Variable * -ErrorAction SilentlyContinue