Windows server завершить сеанс пользователя

Обновлено: 05.07.2024

Как то, в одной конторе нужно было бэкапить файловую базу а она в свою очередь хранилась на серваке, к серваку юзвери цеплялись терминальным клиентом и работали с 1С, понадобилось перед бекапом гасить юзеров, точнее выходить из их сеансов.

И вот был написан скриптик, который по времени перед бекапом выкидывает пользователей.

Скрипт, кстати, во вложении (точнее, 3 скрипта: выкинуть всех, выкинуть активных и выкинуть отключенных).

Как это работает на примере скрипта, который выкидывает всех пользователей:

query user >user_temp_all.txt

2. Убираем из файла строку со словом “console”, так как консольного юзера не нужно выкидывать;

find "console" user_temp_all.txt > user_temp.txt /V

find "Активно" user_temp.txt > user.txt

4. Убиваем файл start.bat;

del start.bat

5. Вдруг никто не подключен, соответственно файл user.txt будет пустой, а файл скрипта нам нужен в любом случае, надо создать и написать что-то в файл, чтобы он смог запуститься;

@echo rem begin files start.bat>start.bat

6. Обработаем файл user.txt. Синтаксис команды for можно посмотреть по команде for /?, но расскажу по-быстрому: команда фор перебирает файл и разлаживает содержимое строки по переменным, ну и запускает для каждой строки команду, разберем начало for /f "skip=2 tokens=3," %%i

for в принципе сама команда, ключ /F означает перебрать и выполнить команду для каждой строки

параметр skip=2 означает, что пропустим 2-е первые строчки

параметр tokens=3 означает, что берем в строке 3-е значение, разделенное пробелами или «,» или «таб.» и помещаем его в переменную %%i

Разберем следующий кусок in (user.txt) DO echo logoff %%i >>start.bat

In (user.txt) означает, что перебираем файл user.txt

DO echo logoff %%i>>start.bat выполнить команду echo logoff %%i (сюда подставляется ид сеанса или значение переменной %%i) и результат добавить к файлу start.bat, команда эхо просто выводит в поток то, что написано после этого слова

7. Первый этап закончили, теперь нужно обработать неактивные сессии, допишем в файл start.bat строчку «echo rem NoAction session» просто чтобы видеть где закончился 1-й этап скрипта, так как файл start.bat не удаляется, то можно посмотреть что в нем было после запуска;

@echo rem NoAction session >>start.bat

8. Принцип второго этапа аналогичный первому, теперь в файле с сессиями ищем строки со словом «Диск», это те сеансы, которые отключены;

find "Диск" user_temp.txt>user.txt

  1. А вот теперь почему делали в два этапа. Просто файл сессий имеет следующий вид

Файл сессий

И, как видно, из файла строка со статусом «Диск» не имеет Имя сеанса и соответственно в отключенном сеансе ID сеанса является 2-й переменной, если пробел считать разделителем, а при активном сеансе она является 3-й переменной, поэтому в первом этапе параметр tokens=3, а во втором этапе tokens=2, вот поэтому скрипт разбил на 2 части

for /f "skip=2 tokens=2," %%i in (user.txt) DO echo logoff ID %%i >>start.bat

9. Теперь убиваем лишние файлы

del user_temp.txt

del user.txt

10. Запускаем наш батник, который у нас получился, и результат работы выводим в файл log_logoff.txt

start.bat > log_logoff.txt

З.Ы.: почему не убили все файлы? чтобы видеть, какие вообще были сеансы после запуска скрипта.

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

Любой сервер в том числе и виртуальный сервер должен работать в постоянном режиме 24 х 7 х 365. И соответственно пользователь, который запускает программы на выполнение на сервере, рассчитывает, что они будут работать в таком же режиме. Именно на это и рассчитывают наши клиенты. Однако устанавливая на VPS сервер различного рода десктопное программное обеспечение, которое разрабатывалось «умельцами» без мысли, что существуют компьютеры, не имеющие мониторов, отключившись от сервера через какое-то время замечают, что его программа перестала работать должным образом, при том что сервер активен и доступен. Замечают это как правило при следующем подключении к серверу для анализа данных с как подразумевалось работавшего ПО. Проблема, очевидно в том, что данное ПО что-то пытается брать со свойств экрана (разрешение, позиция курсора и т.д.) при том, что ни экрана, ни курсора при отключенном сеансе нет.

Данная проблема является частным случаем ограничения работы сеансов по времени, за которую отвечает узел групповой политики «Службы удаленных рабочих столов» с одноименным названием «Ограничение сеансов по времени». Он позволяет гибким образом настраивать время работы запущенных сеансов или Ваших сотрудников на сервере при организации рабочих мест, что позволяет Вам более оптимально использовать ресурсы арендуемого сервера Windows VDS.

Запустим на сервере редактор «Локальной групповой политики» нажав сочетание клавиш Win+R и Набрав команду GPEDIT.MSC


Далее необходимо перейти по следующему пути в ветке «Конфигурация пользователя», если Вы хотите произвести настройки для текущего пользователя или в ветке «Конфигурация компьютера», если Вы хотите настроить для всех пользователей сервера.


1.«Задать ограничение по времени для отключенных сеансов»

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

Если Вы хотите, чтобы Ваша программа работала на сервере в постоянном режиме и не происходило «автовыхода» при отключении, то данный параметр следует указать как Включен и выбрать Никогда. Что является решение выше описанной ситуации.


Данный параметр можно так же использовать в моменты, когда рабочий день сотрудника закончен, но на выполнение некоторых автономных процессов, которые не требуют вмешательства пользователя, нужно еще дополнительное время, в таком случае можно указать Включено и указать необходимо количество времени.

2.«Задать ограничение по времени для активных, но бездействующих сеансов служб удалённых рабочих столов»

Бездействующим сеансом считается тот сеанс, когда удаленный рабочий стол начинает простаивать без каких-либо операций ввода, со стороны пользователя. Сотрудник может подключиться к удаленному рабочему столу сервера, а затем по завершении рабочего дня попросту забыть отключиться от сервера и уйти домой. В таком случае сеанс активен, но простаивает и ресурсы выделяемые сервером и зарезервированные для этого пользователя, простаивают и соответственно расходуются не эффективно. В таком случае можно указать Включено и указать необходимо количество времени, после которого при простое, сеанс будет завершен.


3.«Задать ограничение по времени для активных сеансов служб удалённых рабочих столов»


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



4.«Задать предел времени для выхода из сеансов RemoteApp»

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

Полезные команды cmd, powershell, администрирование, фичи и решения проблем на win/winserver

Рассмотрим такие команды как:

  • query
  • qwinsta (query session)
  • quser (query user)
  • mstsc (RDS shadow)
  • msg
  • change logon
  • shutdown

query

process | session | termserver | user

Более подробно здесь рассмотрятся команды:

а точнее их более короткие аналоги: qwinsta и quser

qwinsta

С помощью этой команды можно узнать, активен ли сеанс пользователя и ID сеанса


Просто команда без каких либо ключей и параметров выводит список сеансов на текущем сервере:

Ключ /server позволит указать другой сервер:

Показать информацию о сеансе конкретного пользователя:

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

Остальные параметры и подробная справка по команде:

quser


В остальном, все ключи у возможности, такие же как и у команды qwinsta:

Ключ /server позволит указать другой сервер:

Показать информацию о конкретном пользователе:

Показать информацию о конкретном пользователе на другом сервере:

Справка и все функции:

RDS shadow (mstsc)

Для того, чтобы узнать ID сеанса, нужно воспользоваться одной из вышеупомянутых команд: qwinsta или quser

Теневое подключение без возможности управления сеансом (только просмотр):

Теневое подключение для управления другим сеансом:

ключ /v:servername позволит подключиться к сеансам другого сервера:

ID сеанса можно узнать с помощью уже рассмотренных команд qwinsta или quser


change logon

Полностью отключить вход в терминальные сессии можно командой:

Все возможные ключи смотрим в справке:

shutdown


Так, например, команда shutdown со следующими параметрами:


Удаленно перезагрузить или выключить компьютер или группу компьютеров через GUI можно командой

Для правильной работы сервера, экономии оперативной памяти, выделенной вашему виртуальному серверу, важно правильно завершать сеансы пользователей на удаленном рабочем столе.

В случае, если не правильно завершать сеансы RDP, то отключенные но не закрытые сеансы удаленных рабочих столов пользователей накапливаются на сервере и забивают всю память и сервер начинает тормозить, затрудняя работу других пользователей.

Как нельзя завершать сеанс?

В случае, если пользователь просто закрывает сеанс крестиком наверху экрана, все открытые программы, сам сеанс пользователя удаленного рабочего стола, остаются открытыми. Соответствено сеанс и программы, 1С и прочие, продолжают занимать память и мощность сервера.

Завершение сеанса RDP на Server 2016

Для завершения сеанса на терминальном сервере работающем под управлением Windows Server 2016 выполните следующие действия:

Откройте стандартное меню ПУСК, и в левой части экрана выберите НЕ кнопку ВКЛ\ВЫКЛ, а чуть выше значок с иконкой пользователя.

После этого правильным способом завершить сеанс, будет нажатие на пункт меню "ВЫХОД".

Пункт "Заблокировать", будет равносилен неправильному завершению сеанса, т.к. на рабочем столе остануться открытыми все программы и документы.

Перед выходом с сервера убедитесь, что вы сохранили все документы и правильно закрылы окна программ 1С и Office.

В случае работы из под учетной записи "Администратор" и выборе нижнего пункта меню (со значокм "ВКЛ") вы можете случайно ВЫКЛЮЧИТЬ сервер и отключить от работы всех пользователей работающих на сервере без их ведома. Будьте внимательны!

Завершение сеанса RDP на Server 2012

Для правильного завершения сеанса подключения к удаленному рабочему столу Windows 2012, на сервере арендованном в нашей компании, необходимо выполнить следующие действия:

завершение сеанса на удаленном рабочем столе 2012

На наших серверах установлена программа Classic Shell, поэтому меню ПУСК выглядит более привычно глазу пользователя.

Для завершение сеанса и закрытия всех программ, необходимо просто выполнить нажатие на меню ПУСК и выбрать пункт "Завершение сеанса".

В случае работы из под Администратора необходимо соблюдать осторожность, так как данное выпадающее меню также содержит пункт "Завершение работы" с помощью которого соответственно останавливается работа всего сервера и завершаются сеансы всех пользователей.

Ознакомьтесь с нашей статьей, как правильно завершать работу сервера, работающего на операционной системе Windows Server 2012 или 2016.

Читайте также: