Для обслуговування термінальних серверів в складі RDS ферми існує спеціальний режим Drain Mode (режим стоку, слива). Перевівши RDS сервер в drain режим, ви можете заборонити сервера приймати нові RDP підключення користувачів, а поточні підключення будуть активними поки користувачі не відключаться через logoff або по таймаут RDS сесії. Після цього ви можете виконати технічне обслуговування сервера, не зупиняючи роботу RDS ферми (встановити оновлення, змінити налаштування сервера або програм, оновити конфігураційні файли і т.д.)

Що таке Drain Mode в Windows Server RDS?

Drain mode вперше з’явився в Windows Server 2008 (Terminal Services Server Drain mode) і дозволяє заборонити RDS хосту приймати нові підключення. Як правило цей режим використовується, коли адміністратору сервера потрібно зробити обслуговування сервера (встановити оновлення Windows, налаштувати або оновити додатки), не зачіпаючи доступність всієї RDS ферми. RDS хост може працювати в трьох режимах Drain Mode:

  • Дозволити всі підключенняs (це стандартний режим) сервер RD Session Host приймає нові підключення;
  • Дозволити повторне підключення, але запобігати появі нових входів – користувачам дозволено перепідключатися до існуючих сеансів, але створювати нові заборонено. Якщо перезавантажити сервер, жоден користувач не зможе підключиться до нього;
  • Дозволити повторне підключення, але запобігати появі нових входів, поки сервер не буде перезапущено – пункт аналогічний попередньому, тільки після перезавантаження режим User Logon скидається на Allow All Connections.

Заборона входу нових користувачів на RDS сервер

Ви можете включити Drain Mode на хост сервері RDS в налаштування RDS колекції.

  1. Відкрийте Server Manager -> All Servers -> Додайте всі RDS сервера ферми;
  2. Виберіть Remote Desktop Services в лівій панелі Server Manager. Виберіть розділ RDS колекцій (Collections);
  3. У секції HOST SERVERS виберіть сервер, які потрібно перевести в Drain і в контекстному меню виберіть пункт “Не дозволяти нові з’єднання“(Не дозволяти нові підключення).

rds коллекция Не дозволяти нові з'єднання

Користувачі з активними сесіями зможуть перепідключитися до цього сервера, а всі нові підключення будуть перенаправлені Connection Broker-му на інші хости RDS ферми.

Також ви можете змінити Drain режим локально на RDS хості з командного рядка. Для цього використовується команда change logon.

команда change logon

Щоб заборонити вхід нових користувачів, виконайте команду:

change logon /drain
змінити вхід / злив - Вхід нових користувачів ВИМКНЕНО, але ПІДКЛЮЧЕННЯ до існуючих сеансів ВИМКНЕНО

New user logons are DISABLED, but reconnections to existing sessions are ENABLED

Тепер, якщо новий користувач спробує безпосередньо підключиться до RDS хосту (коли RD Connection Broker не використовується), з’явиться помилка:

Remote logins are currently disabled.

rds windows server 2016 помилка підключення Remote logins are currently disabled.
При цьому в логах RDS хоста буде з’являтися подія з Event ID 1070 від джерела TerminalServices-RemoteConnectionManager:

A logon request was denied because the RD Session Host server is currently in drain mode and therefore not accepting new user logons. To configure the server to allow new user logons, use the Remote Desktop Services Configuration tool.

Наступна команда включає режим Drain до перезавантаження хоста:

change logon /drainuntilrestart

Щоб заборонити підключатися до хосту навіть користувачам з активними сесіями, виконайте команду:

change logon /disable

Session logins are currently DISABLED

Якщо ви підключені до хосту Remote Desktop Session Host в режимі клієнтської сесії, відключили вхід даної командою і завершили свій сеанс (logoff.exe), Ви зможете підключитися до сервера тільки через консоль (mstsc /admin).

Щоб уможливити з’єднання, виконайте:

change logon /enable

Перевірити, чи включений режим стоку на вашому RDS сервері можна командою:
change logon /query

Session logins are currently ENABLED

змінити вхід / запит
Якщо при спробі змінити режим Drain на сервері командою change logon з’являється помилка:

Connections are currently ENABLED by Group Policy for this machine, unable to change.

На даний момент з’єднання АКТИВОВАНІ груповою політикою для цього пристрою, неможливо змінити.

Значить у вас налаштований режим Drain через GPO. параметр називається Дозволити користувачам віддалено підключатися за допомогою служб віддаленого робочого столу і знаходиться в розділі політик Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Connections.

групповая политика rds Дозволити користувачам віддалено підключатися за допомогою служб віддаленого робочого столу

Вимкніть цю політику, або переведіть її в режим Not Configured.

Управління Drain Mode за допомогою PowerShell

Ви можете управляти настройками Drain mode для колекції RDS хостів або на окремому сервері за допомогою PowerShell:

Import-Module RemoteDesktop
# запретить новые RDS подключения к этому серверу
Set-RDSessionHost -SessionHost rdsh1.winitpro.ru -NewConnectionAllowed No -ConnectionBroker rdshcb.winitpro.ru
# разрешить подключение пользователям
Set-RDSessionHost -SessionHost rdsh1.winitpro.ru -NewConnectionAllowed Yes -ConnectionBroker rdshcb.winitpro.ru

При зміні режиму роботи Drain змінюються значення наступних параметрів в реєстрі:

  • WinStationsDisabled в HKLM Software Microsoft Windows NT CurrentVersion Winlogon
  • TSServerDrainMode HKLM System CurrentControlSet Control Terminal Server

параметр TSServerDrainMode в реєстрі

Наприклад в Drain Mode вони встановлюються WinStationsDisabled = 0 і TSServerDrainMode = 2.

Також ви можете перевірити поточний режим Drain на хості таким PowerShell скриптом:

gwmi win32_terminalservicesetting -N "rootcimv2terminalservices" | %{
if ($_.logons -eq 1){
"Disabled"}
Else {
switch ($_.sessionbrokerdrainmode)
{
0 {"Enabled"}
1 {"DrainUntilRestart"}
2 {"Drain"}
default {"error"}
}
}
}

Чи включається режим Drain в PowerShell так (аналог Change logon /Drain):

$temp = (gwmi win32_terminalservicesetting -N "rootcimv2terminalservices")
$temp.sessionbrokerdrainmode=2
$temp.put()

Для перекладу сервера в звичайний режим (change logon /enable), Виконайте:

$temp = (gwmi win32_terminalservicesetting -N " rootcimv2terminalservices ")
$temp.sessionbrokerdrainmode=0
$temp.logons=0
$temp.put()

powershell - включити / відключити режим стоку drain mode

Leave a Reply

Your email address will not be published. Required fields are marked *