Как предотвратить блокировку сеансов RDP при простое?

Вопрос или проблема

Я заменяю некоторые серверы Windows Server 2008 R2 на новые серверы Windows Server 2019. Оба комплекта в основном управляются через RDP.

Новые серверы 2019 года возвращают RDP-сессии на экран входа после определенного времени бездействия; я не уверен, сколько именно, но что-то между 10-30 минутами. Когда я работаю с несколькими серверами одновременно и переключаюсь между ними, это быстро становится очень раздражающим. Старая версия 2008 R2 этого не делает.

Я не смог найти никаких различий в конфигурации между двумя комплектами. Я пробовал следующее через настройки групповой политики на новом комплекте:

  • Сервер сети Microsoft: Количество времени бездействия, необходимое для приостановки сеанса (600 минут)
  • Интерактивный вход: Ограничение на неактивность машины (86400 секунд)
  • Выключить дисплей (подключен): (10 часов)

Настройки успешно применяются, но ничего из этого не помогло. Я также проверил настройки Screensaver (хватаясь за соломинку), и экранные заставки, похоже, отключены по умолчанию (что имеет смысл). Я не смог найти ничего другого, что могло бы требовать входа после бездействия.

Я явно упускаю какую-то настройку. Но какую?

Все вышеуказанные методы не сработали для меня, но я нашел обходное решение.

Запустите PresentationSettings.exe (инструмент настроек презентации) и включите опцию “Я сейчас делаю презентацию” вместе с “Выключить экранную заставку”. Затем нажмите ОК.

После этого блокировка будет отключена.

Вы можете использовать тот же инструмент, чтобы отключить этот режим.

Соответствующие настройки:

Конфигурация компьютера > Административные шаблоны > Компоненты Windows > Службы удаленного рабочего стола > Хост сеансов удаленного рабочего стола > Ограничения времени сеансов

  • Закрывать сеанс, когда достигаются временные ограничения
  • Установить временное ограничение для активных, но неактивных соединений служб удаленного рабочего стола
  • Установить временное ограничение для активных соединений служб удаленного рабочего стола
  • Установить временное ограничение для отключенных сеансов

Если между клиентом и сервером есть брандмауэр, должно быть настроено время ожидания keep-alive.

Конфигурация компьютера > Административные шаблоны > Компоненты Windows > Службы удаленного рабочего стола > Хост сеансов удаленного рабочего стола > Соединения

  • Настроить интервал keep-alive соединения

Запуск PresentationSettings.exe ничего для меня не сделал. Установка всех групповых политик тоже не помогла. Что в конечном итоге сработало, так это скрипт Powershell, который устанавливает свое состояние выполнения потока, чтобы указать, что ПК не должен блокироваться:

# основано на https://gist.github.com/CMCDragonkai/bf8e8b7553c48e4f65124bc6f41769eb
$Code=@'
[DllImport("kernel32.dll", CharSet = CharSet.Auto,SetLastError = true)]
public static extern void SetThreadExecutionState(uint esFlags);
'@

$ste = Add-Type -memberDefinition $Code -name System -namespace Win32 -passThru

# Запрашивает, чтобы другие флаги EXECUTION_STATE оставались в действии, пока
# Состояние выполнения потока не будет вызвано снова с установленным флагом ES_CONTINUOUS и
# одним из других флагов EXECUTION_STATE сброшено.
$ES_CONTINUOUS = [uint32]"0x80000000"

$ES_AWAYMODE_REQUIRED = [uint32]"0x00000040"
$ES_DISPLAY_REQUIRED = [uint32]"0x00000002"
$ES_SYSTEM_REQUIRED = [uint32]"0x00000001"

try {
    Write-Host "Не даем засыпать... нажмите Enter, чтобы выйти"
    $ste::SetThreadExecutionState($ES_SYSTEM_REQUIRED -bor $ES_DISPLAY_REQUIRED -bor $ES_CONTINUOUS )
    Read-Host "Enter или Exit для остановки не засыпания"
} finally {
    Write-Host "Остановка режима бодрствования"
    $ste::SetThreadExecutionState($ES_CONTINUOUS)
}

Вы можете использовать Планировщик задач Windows, чтобы запланировать выполнение этой задачи в скрытом окне каждый раз, когда вы входите в систему:

powershell -WindowStyle Hidden -File "C:\Users\username\Desktop\never_lock.ps1"

Ответ или решение

Чтобы предотвратить автоматическую блокировку сеансов RDP на ваших новых Windows Server 2019, выполните следующие шаги:

1. Настройка политик групповой безопасности

Откройте редактор локальной групповой политики (gpedit.msc) и измените следующие параметры:

  • Перейдите в раздел: Конфигурация компьютера > Административные шаблоны > Компоненты Windows > Услуги удаленного рабочего стола > Хост сеансов удаленного рабочего стола > Ограничения времени сеанса
    • Закончить сеанс, когда истечет ограничение времени – Убедитесь, что эта политика отключена.
    • Установить ограничение времени для активных, но неактивных подключений к службам удаленного рабочего стола – Убедитесь, что эта политика отключена или установите ее на значение "0" (без ограничений).
    • Установить ограничение времени для активных подключений к услугам удаленного рабочего стола – Убедитесь, что эта политика отключена.
    • Установить ограничение времени для отключенных сеансов – Убедитесь, что эта политика отключена.

2. Проверка настроек связи

  • Перейдите в раздел: Конфигурация компьютера > Административные шаблоны > Компоненты Windows > Услуги удаленного рабочего стола > Хост сеансов удаленного рабочего стола > Подключения
    • Настроить интервал соединения keep-alive – Убедитесь, что этот параметр настроен на нужное вам значение (например, 60 секунд), чтобы предотвратить отключение при бездействии.

3. Настройка скрипта PowerShell для предотвращения блокировки

Если изменения групповых политик не помогают, вы можете использовать скрипт PowerShell для установки состояния выполнения потока, указывая системе не блокировать экран:

# Код для предотвращения блокировки.
$Code=@'
[DllImport("kernel32.dll", CharSet = CharSet.Auto,SetLastError = true)]
public static extern void SetThreadExecutionState(uint esFlags);
'@

$ste = Add-Type -memberDefinition $Code -name System -namespace Win32 -passThru

$ES_CONTINUOUS = [uint32]"0x80000000"
$ES_AWAYMODE_REQUIRED = [uint32]"0x00000040"
$ES_DISPLAY_REQUIRED = [uint32]"0x00000002"
$ES_SYSTEM_REQUIRED = [uint32]"0x00000001"

try {
    Write-Host "Система будет оставаться активной... нажмите enter, чтобы выйти"
    $ste::SetThreadExecutionState($ES_SYSTEM_REQUIRED -bor $ES_DISPLAY_REQUIRED -bor $ES_CONTINUOUS )
    Read-Host "Нажмите Enter или выход, чтобы остановить работу"
} finally {
    Write-Host "Остановка режима активности"
    $ste::SetThreadExecutionState($ES_CONTINUOUS)
}

4. Настройка автоматического запуска скрипта

Используйте Планировщик заданий Windows для автоматического запуска скрипта при входе в систему. Создайте новое задание и укажите команду для запуска:

powershell -WindowStyle Hidden -File "C:\Users\username\Desktop\nikogda_ne_budte_zablokirovany.ps1"

5. Дополнительные параметры

  • Убедитесь, что параметры экономии энергии, такие как выключение монитора и спящий режим, установлены в "Никогда".

Заключение

Эти настройки должны помочь вам избежать блокировки сеансов RDP на Windows Server 2019. Если вы все еще сталкиваетесь с проблемами, убедитесь, что другие политики безопасности, применимые к вашей сети, не конфликтуют с указанными вами настройками.

Оцените материал
Добавить комментарий

Капча загружается...