Как сделать logoff на удаленном компьютере

Добавил пользователь Евгений Кузнецов
Обновлено: 04.10.2024

Область применения: Windows Server (половина ежегодного канала), Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012 Applies to: Windows Server (Semi-Annual Channel), Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012

Выполнит выход пользователя из сеанса на удаленный рабочий стол сервере узла сеансов и удалит сеанс. Logs off a user from a session on a Remote Desktop Session Host server and deletes the session.

Синтаксис Syntax

Параметры Parameters

Параметр ParameterОписание Description
Указывает имя сеанса. Specifies the name of the session. Это должен быть активный сеанс. This must be an active session.
Указывает числовой идентификатор, определяющий сеанс на сервере. Specifies the numeric ID which identifies the session to the server.
/server: /server:Указывает сервер узла сеансов удаленный рабочий стол, содержащий сеанс, для которого пользователь должен выйти из системы. Specifies the Remote Desktop Session Host server that contains the session whose user you want to log off. Если не указано, используется сервер, на котором активна в данный момент. If unspecified, the server on which you are currently active is used.
/v /vОтображает сведения о выполняемых действиях. Displays information about the actions being performed.
/? /?Отображение справки в командной строке. Displays help at the command prompt.

Примечания Remarks

Если параметр или не указан, функция выхода из системы выполняет выход пользователя из текущего сеанса. If or isn’t specified, logoff logs the user off from the current session.

После выхода пользователя из системы все процессы завершаются, а сеанс удаляется с сервера. After you log off a user, all processes end and the session is deleted from the server.

Пользователь не может выйти из сеанса консоли. You can’t log off a user from the console session.

Примеры Examples

Для выхода пользователя из текущего сеанса введите: To log off a user from the current session, type:

Для выхода пользователя из сеанса с помощью идентификатора сеанса, например сеанса 12, введите: To log off a user from a session by using the session’s ID, for example session 12, type:

Для выхода пользователя из сеанса с использованием имени сеанса и сервера, например Session TERM04 на сервере Server1, введите: To log off a user from a session by using the name of the session and server, for example session TERM04 on Server1, type:

Как сделать logoff на удаленном компьютере

Описание проблемы

Методы завершения сессии пользователя не терминале

Существует несколько методов позволяющие выкинуть пользователя с сервера.

Как выкинуть пользователя из оснастки управления RDS

И так, у меня есть мой любимый, тестовый пользователь в Active Directory, по имени Барбоскин Геннадий Викторович. Предположим, что он зашел на терминальный стол и нам по причине зависания его сессии, нужно сделать ему выход. Первый метод, это использование оснастки по управлению RDS фермой, я вам рассказывал, как ее собирать. Открываем раздел с вашей коллекцией RDS фермы. В поисковом фильтре указываем логин или фамилию нужного сотрудника. В результате получаем хост, где он работает.

kak vykinut polzovatelya 02

kak vykinut polzovatelya 03

Второй метод разлогинить пользователя на терминальном сервере

kak vykinut polzovatelya 04

kak vykinut polzovatelya 05

Использование утилиты RWINSTA

или удаленно qwinsta /server:имя сервера | findstr barboskin.g

vyhod polzovatelya 2

И в первом и во втором случае, пользователь будет разлогинен с данного сервера. Данную команду можно запускать удаленно, со своего рабочего места, главное, чтобы были права на log off. Данный метод меня ни раз выручал в моей практике, например случай с зависшей сессией на Windows Server 2016, где вместо логина пользователя было имя (4).

Как отключить пользователя через reset session

vyhod polzovatelya 3

Как отключить пользователя через logoff

vyhod polzovatelya 4

Выход пользователя через командлет Stop-TSSession

Есть такой замечательный командлет Stop-TSSession. Посмотрим на сервере ID и имя сеанса, для этого в открытой оболочке PowerShell введите:

В итоге я вижу, что у пользователя barboskin.g SessionID 3. Далее пишем

vyhod polzovatelya 1

Соглашаемся с тем, что будет производиться log off для данного пользователя. Проверяем, что сессия завершена. Можно вот таким простеньким скриптом из планировщика задач, разлогинивать сессии:

Выход пользователя через командлет Stop-TerminalSession

Данный командлет устанавливается отдельно, совместно с пакетом Pscx. Первым делом посмотрим локально или удаленно идентификаторы сессии пользователя, для которого мы хотим сделать log off. Выполняем команду:

Get TerminalSession 1

Нужный мне ID сеанса 427. Далее воспользуемся командлетом Stop-TerminalSession, чтобы выкинуть пользователя и завершить его сессию.

Заметки Лёвика

web программирование, администрирование и всякая всячина, которая может оказаться полезной

Logoff удаленного пользователя сервера терминалов

Windows ползволяет пользователю удаленно подключаться к другому компьютеру. Иногда бывают ситуации, когда нужно удаленно выкинуть пользователя с сервера терминалов (Terminal Service Server). ( Если максимальное количество удаленных пользователей уже подключено, и при этом требуется подключиться)

Подключение к серверу терминалов в режиме консоли
mstsc /v: /console

Синтаксис
reset session [/server:имя_сервера] [/v]

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

Синтаксис
tsshutdn [время_ожидания] [/server:имя_сервера] [/reboot] [/powerdown] [/delay:задержка_выхода] [/v]

утилита exitwin (?)

В MS Windows 2000 режим Remote Administration разрешал два удаленных сеанса для системного администрирования. В Windows Server 2003 вместо установки Terminal Services можно воспользоваться Remote Desktop. В Windows Server 2003, Remote Desktop позволяет создать два виртуальных сеанса RDP, а также удаленное подключение к консольному сеансу сервера.

Для включения Remote Desktop в System Control Panel, выбираем вкладку Remote и включаем флажок Allow users to remotely connect to your computer. По умолчанию удаленное соединение разрешено только локальным администраторам, но вы можно добавить нужных пользователей в группу Remote Desktop Users. Учтите, что включение Remote Desktop не активирует систему совместимости приложений, поэтому приложения могут работать некорректно

Требования для доступа к терминальному серверу

WS2K3 имеет три различных уровня защиты, которые позволяют контролировать доступ к терминальному серверу. Чтобы пользователь мог зарегистрироваться на терминальном сервере, необходимо соблюдение следующих трех условий:
* Право Allow log on through Terminal Services (разрешен вход через службу терминалов) — В Windows 2000 вам необходимо было давать право Log on locally всем пользователям, которым требовался доступ терминальному серверу. Это создавало потенциальную брешь в безопасности, поскольку позволяло регистрироваться на консоли сервера, обходя ограничения, которые вы сделали для RDP. WS2K3 разделяет право локального входа и право входа через службу терминалов. По умолчанию, на WS2K3 право Allow log on through Terminal Services дается только администраторам и членам группы Remote Desktop Users.

* Права использовать RDP — Администратор может установить разрешения RDP с помощью Terminal Services Configuration. Как уже упоминалось, Microsoft изменила разрешения по умолчанию для протокола в WS2K3. Если в Win2K локальной группе Users был разрешен доступ к RDP, то в WS2K3 этот доступ ограничен только локальной группой Remote Desktop Users. Поэтому чтобы пользователи могли регистрироваться на терминальном сервере, вы должны поместить их в эту группу.

Поиск юзера по компьютерам домена (временно)

Locate User от Digital Labs
IS Decisions UserLock (Единственный недостаток программы это установка на компах домена клиентских частей. Естевственно это можно сделать автоматически и централизованно для всей сети.)

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

1000++ способ запуска команд на удаленном компьютере



В наше время даже для собак придумали удаленное управление.

В качестве того, зачем нужен такой запуск программ, можно привести недавнюю истерию с Петей\Не-Петей, когда все бросились проверять\отключать SMBv1 и загружать обновления. Да и провести инвентаризацию или установить срочный патч таким методом тоже можно.

Когда-то давно я устроился работать в организацию в период эпидемии Kido\Conficker. Наиболее простым способом выяснить, все ли хорошо в ИС компании, была славная утилита от Касперского под названием Kido Killer, которая проверяла наличие вируса и устраняла его. Запускать программу на доброй сотне машин руками было невесело, поэтому пришлось знакомиться с автоматизацией.

Если в операционных системах *nix для удаленного запуска, как правило, используется SSH, то у Windows способов запуска программ и скриптов воистину как песка в пустыне. Я разберу основные варианты, как общеизвестные, так и экзотические. Таких очевидных вещей как telnet-сервер касаться не буду, тем более Microsoft уже убрала его из современных ОС.

Способы старые, временем проверенные

Psexec

Пожалуй, это первое, что приходит на ум, когда идет речь об удаленном запуске программ. Утилита от Марка Руссиновича используется еще со времен Windows NT и до сих пор применяется. Помимо основной функции, можно использовать ее и как Runas, и для запуска программ в пользовательской сессии терминального сервера. Psexec также позволяет задавать ядра процессора, на которых будет запускаться программа, и ее приоритет в системе.

В качестве примера посмотрим, установлено ли обновление, закрывающее нашумевшую уязвимость SMB на списке компьютеров:

В файле computers.txt находится список компьютеров. Для запуска по всему домену можно использовать \\*. В файле \\server\share\log.txt будут появляться имена рабочих станций или серверов без обновления. Если в домене существуют компьютеры с *nix на борту или нет доступа к административному сетевому ресурсу Admin$ ― команда на этой машине не выполнится, но обработка продолжится. Чтобы скрипт не зависал при каждой попытке подключения, можно задать тайм-аут с помощью ключа -n.

Если компьютер выключен ― мы об этом не узнаем. Поэтому лучше предварительно проверять доступность машин или собирать в файле информацию об успешном или неудачном выполнении.

К минусам Psexec можно отнести то, что она из-за своего удобства и популярности часто используется вирусописателями. Поэтому антивирусные системы могут обнаруживать утилиту как опасность вида remote admin.

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

Для управления системами Windows с помощью разных графических утилит часто используется WMI (Windows Management Instrumentation) ― реализация объектно-ориентированного стандарта управления WBEM. В качестве утилиты с графическим интерфейсом для работы с WMI можно использовать wbemtest.exe.

Для работы с WMI из консоли создана wmic.exe. Например, для проверки установленных обновлений вместо жутковатой конструкции из предыдущего примера можно использовать простую команду:

Еще при помощи WMI можно запускать программы – синтаксис предельно прост:

К сожалению, в отличие от Psexec, получить вывод в консоли не получится ― придется выводить результаты команды в файл.

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

Групповые политики и скрипты

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



Скрипты, выполняющиеся при старте и завершении системы.

qnt3h7eayd52yhnhdspqrmyuzm8


Скрипты, выполняющиеся при входе и выходе пользователя из системы.

Скрипты, настраиваемые в пользовательском разделе, выполняются от имени пользователя, а в разделе компьютера ― под аккаунтом SYSTEM.

Назначенные задания

Довольно интересный способ, заслуживающий право на жизнь. Назначенные задания можно создавать из командной строки при помощи утилиты schtasks.exe, выполнять их, затем удалять. Подробнее с синтаксисом можно ознакомиться в документации, я же разберу пример использования назначенных заданий в доменной среде. Предположим, нам нужно выполнить команду как можно быстрее вне зависимости от того, выключен компьютер или нет. Для этого используются так называемые предпочтения групповых политик (Group Policy Preference).



Создание нового назначенного задания.

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

Пример WMI-фильтра для применения политики только на компьютерах с Windows XP:

uscmvzbrejl157j p9zupsphwp8


Запускаем немедленную задачу только один раз.

Назначенные задания позволяют явно задать имя пользователя для запуска программы, в том числе и для SYSTEM.

Через реестр

Модификация реестра на пользовательских машинах ― странный вариант, лишь на случай крайней необходимости. Можно использовать ветки Run или RunOnce. Подробнее о них ― в документации. Сама модификация реестра может проводиться через групповые политики или из командной строки ― например, такой командой:

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

Теперь перейдем к новым инструментам.

Способы новые или куда же без PowerShell

PowerShell, оправдывая свое название, может подключаться к удаленным компьютерам при помощи WMI, RPC и WS-Management (WSMan). Использование последнего метода требует предварительной настройки.

Командлеты, не требующие предварительной настройки, как правило, имеют параметр ComputerName, но не имеют параметра Session. Посмотреть список таких командлетов можно командой:

Для настройки WSMan в общем случае достаточно выполнить команду Enable-PSRemoting-Force. Она запустит службу удаленного управления WinRM и пропишет исключения в фаерволе ― в принципе, это можно сделать для всего домена при помощи групповых политик. Подробнее настройка описана в документации.

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



Проверка возможности подключения.

Для того чтобы выполнить определенную команду или скрипт, используется командлет Invoke-Command со следующим синтаксисом:

Где COMPUTER ― имя компьютера, COMMAND ―– имя команды, а USERNAME ― имя пользователя, если оно нужно.

q71e0p5kcsi5orbzpfjomiw2nq4


Смотрим содержимое диска С удаленного компьютера.

Если же нам нужно получить полноценную консоль ― не автоматизации ради, а ради управления конкретным компьютером, ― то можно использовать командлет Enter-PSSession.



Работаем в консоли удаленного компьютера.

Напомню, что с помощью JEA можно ограничить доступные подобной сессии командлеты или дать доступ нужным без прав администратора.

Конечно, кроме встроенных средств и небольших утилит, существует множество программ для управления структурой. Помимо взрослых решений, для управления конфигурациями вроде Chef, Ansible и MS SCCM можно использовать и средства мониторинга вроде Zabbix, и даже консоль управления антивирусом Касперского.

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

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

Нужно сделать backup базы, но пользователи не выходят нормально из 1С и висят терминальные сессии, что делать?
Просто поставь скрипт в задачи сервера, например, за час до бекапа, и вуаля - все пользователи вышли.
Скрипт ниже :)

Преамбула:

Как то, в одной конторе нужно было бэкапить файловую базу а она в свою очередь хранилась на серваке, к серваку юзвери цеплялись терминальным клиентом и работали с 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-е первые строчки

Разберем следующий кусок 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, команда эхо просто выводит в поток то, что написано после этого слова

@echo rem NoAction session >>start.bat

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

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

Файл сессий

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Почему задача так сформулирована, потому как доводилось мне администрировать одну организацию ( kari), но вот только чтобы подключиться к серверам, нужно было зайти сперва на одну станцию выделенную для прямого доступа, а уже потом с нее на контролируемые сервера. Но как всегда не всё так красиво и удобно, на контролируемых серверах (к примеру dc,ts и так далее) уже был залогинен сотрудник из отдела имеющий привычку не завершать корректно свою сессию . Попытки объяснить или как то донести до человека, что он не один, результатов не приносило. Поэтому родилась данная заметка.

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

Please wait for KARI\d.shatilov to respond

Вообщем я разобрал как выкидывать залогининных пользователей через консоль :

Как завершить удаленную сессию на терминальном сервере

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

Win + R → mstsc /v: выделенная_станция > /admin /w:1024 /h:768

Далее открываю консоль командной строки на выделенной станции с правами Администратора и делаю так:

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

На заметку: нужно обладать правами Администратора на удаленном сервере прежде чем исполнять ниже следующий запрос.

C:\Users\aollo>qwinsta /server:ts03f.kari.local

Отобразить состояние пользователей на Терминальном сервере

Этим мы получаем информация по активным rdp сессиям на удаленном терминальном сервере ( ts 03 f ), то т.к. для администрирования нужно подключаться с ключом / admin , то нужно одну из двух сессий выбить, предварительно проверить каков период неактивности у нее.

Вывести все терминальные подключения которые находятся в статусе Disconnect :

services 0 Disc

e.lysenko 28 Disc

n.tashtenov 39 Disc

y.fomenko 62 Disc

R.Shishkin 66 Disc

s.likova 91 Disc

a.lukashenko 109 Disc

Чтобы кикнуть кого-либо ( в данном случае пользователя a.lukashenko ) нужно, указать идентификатор сессии полученной из предыдущего исполнения команды:

C:\Users\aollo>logoff /server:ts07f.kari.local 109 /v

Logging off session ID 109

services 0 Disc

Не правильно отсоединенной сессии нет, я ее логофнул.

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

Используйте прокси ((заблокировано роскомнадзором, используйте vpn или proxy)) при использовании Telegram клиента:

Поблагодари автора и новые статьи

будут появляться чаще :)

Карта МКБ: 4432-7300-2472-8059

Большое спасибо тем кто благодарит автора за практические заметки небольшими пожертвованиями. С уважением, Олло Александр aka ekzorchik.

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