При администрировании RDP-сервера, к которому ежедневно подключается, примерно 100 человек, возникает проблема не закрытых сеансов. Пользователи не утруждают себя правильным отключением от RDP-сервера и, просто, закрывают окно подключения к удаленному рабочему столу, на крестик, что в свою очередь приводит к тому, что сессия переходит в статус «Отключена» и продолжает висеть на сервере, процессы внутри этой сессии продолжают выполняться и со временем она начинает потреблять значительно больше оперативной памяти, чем сессия, созданная только что. Решение для данной проблемы следующее:

Нужно внести изменения в локальную групповую политику:

1. Нажимаем Win+R и в окно «Выполнить» вводим gpedit.msc

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

3. Переводим значение этого параметра в статус «Включено» и, нижу, выбираем время по истечении которого будет происходить «убийство» отключенной сессии.

После этих действий перезагружаем сервер и теперь отключенные сеансы не будут висеть на сервере вечно, а будут закрываться по истечении времени, которое вы указали в настойке. Можно указать, например, 2 часа.

Но, это не полное решение проблемы. Некоторые пользователи, как оказалось, оставляют свои сеансы в активном состоянии, т.е. они круглосуточно подключены к RDP-серверу и, даже, не отключаются. Их сессии, также, постепенно начинают занимать в памяти много места и было бы неплохо их время от времени тоже отключать. Сначала я нашел такое решение:

В планировщик заданий я добавил команду:

 logoff 65536

Она отключает сеансы всех активных пользователей (не выходит из сеанса, а просто отключает). Остается только подождать два часа и предыдущая политика убьёт все отключенные сеансы (в нашем случае все RDP-сеансы). Это вариант, конечно, хорош, но есть один неприятный момент. Он не учитывает пользователя сеанса и отключит даже сеанс администратора, что в некоторых случаях может быть не совсем хорошо, так как в сеансе администратора может выполняться какая-то долгая процедура, например выполняющаяся сутки. А наш планировщик отключит по расписанию все сессии, например, в час ночи, затем через два часа убьёт их окончательно, с ними убьёт и процедуру запущенную в сессии администратора.

Я нашел следующее решение:

Вместо ежедневного выполнения команды:

logoff 65536

Я решил ежедневно, в ночное время, выполнять следующий командный файл:

@echo off
rem переносим информацию о всех сессиях в файл tempsession.txt
quser > tempsession.txt
rem формируем файл session.txt без строк со словом "admin" и "admin2"
findstr /V /C:"admin" /C:"admin2" tempsession.txt > session.txt
rem выполняем logoff для каждого пользователя из файла session.txt
for /f "skip=1 tokens=2," %%i in (session.txt) DO logoff %%i
rem удаляем временные файлы
del tempsession.txt
del session.txt

Он не отключает, а делает отдельный logoff для каждой сессии, исключая при этом сессию пользователя/пользователей, который указан в строке:

findstr /V /C:"admin" /C:"admin2" tempsession.txt > session.txt

в нашем случае пользователями, для которых не будет выполнен logoff, являются admin и admin2

 


  1. Рустам:

    Спасибо!