- LOGOFF – завершение сеанса пользователя Windows .
- Страна Админа
- Популярно об информационных системах и технологиях
- admin@adminland.ru
- Вы здесь
- Поддержите adminland
- Завершение работы всех пользователей (logoff all users)
- Форумы:
- Есть статья 259436 от
- отключение отключенных 🙂
- Использовать имя пользователя
- ну у меня получилось, вот
- В ковычки имена зикинь и
- Powershell
- Анализ процессов
- небольшая доработка
- Побочный эффект
- Windows server завершить сеансы всех пользователей
- Описание проблемы
- Методы завершения сессии пользователя не терминале
- Как выкинуть пользователя из оснастки управления RDS
- Второй метод разлогинить пользователя на терминальном сервере
- Использование утилиты RWINSTA
- Как отключить пользователя через reset session
- Как отключить пользователя через logoff
- Выход пользователя через командлет Stop-TSSession
- Выход пользователя через командлет Stop-TerminalSession
- Автоматическое завершение сеансов подключенных пользователей к терминальному серверу Windows Server 2008 R2
LOGOFF – завершение сеанса пользователя Windows .
Команда MODE используется для завершения сеанса пользователя (выхода из Windows). Формат командной строки:
LOGOFF [имя сеанса | ИД сеанса] [/SERVER:сервер] [/V] [/VM]
Параметры командной строки:
имя сеанса — Имя сеанса.
ID сеанса — Идентификатор сеанса.
/SERVER:сервер — Сервер удаленных рабочих столов, содержащий пользователя пользователя (по умолчанию — текущий).
/V — Отображение информации о выполненных действиях.
/VM — Завершение сеанса на сервере или в виртуальной машине. Необходимо указать уникальный идентификатор сеанса.
LOGOFF /? — отобразить справку по использованию.
logoff — завершить текущий сеанс пользователя (выйти из системы).
logoff rdp-tcp#3 /server:COMP10 — завершить сеанс с именем rdp-tcp#3 на сервере COMP10 . Имя сеанса можно определить командой QUSER /server:COMP10 .
logoff 2 /server:COMP10 — завершить сеанс с идентификатором 2 на сервере COMP10
logoff 2 /server:192.168.1.110 — то же, что и в предыдущем примере, но вместо имени сервера используется его IP-адрес.
logoff 2 /server:192.168.1.110 /V — использовать подробный режим отображения сведений о выполняемых действиях. В этом случае на экран выводится сообщение:
Будет выполнен выход user (сеанс 2) из системы ,
продолжить (n=нет)?n
Отображается не только идентификатор сеанса, но и имя пользователя. В этом режиме, завершение сеанса можно отменить, ответив n на запрос продолжить (n=нет)?n . По умолчанию, отмена завершения сеанса не выполняется.
В качестве альтернативы команде logoff можно использовать команду SHUTDOWN с параметром -l
Страна Админа
Популярно об информационных системах и технологиях
admin@adminland.ru
Вы здесь
Поддержите adminland
За 2020 год из пары десятков тысяч посетителей, набралось всего пару десятков перечислений от 50 до 300 рублей.
Пустяк в денежном выражении, но большая ценность для автора. Посмотрим что год грядущий нам готовит ))
Сумма абсолютно не важна — главное участие.
Завершение работы всех пользователей (logoff all users)
Требуется завершить работу всех пользователей на терминальном сервере в автоматическом режиме для проведения архивации. При решении простой на первый взгляд задачи проявилось столько нюансов, что решил оформить ее в виде форума.
Форумы:
Есть статья 259436 от
Опубликовано 5 апреля, 2012 — 16:04 пользователем manager
Есть статья 259436 от Микрософта. Вкратце советуют так:
query session >session.txt
for /f «skip=1 tokens=3,» %%i in (session.txt) DO logoff %%i
На самом деле надо делать query user, так как session вернет лишние строки для services, console и rdp-tcp.
query user >session.txt
for /f «skip=1 tokens=3,» %%i in (session.txt) DO logoff %%i
Исправленный вариант отработает для всех активных пользователей, но не сделает logoff для отключенных (disconnect).
отключение отключенных 🙂
Опубликовано 5 апреля, 2012 — 16:14 пользователем manager
Анализируя в цикле файл session.txt мы используем ключ /f с параметрами skip=1 и tokens=3. Первый параметр указывает, что надо пропустить первую (заголовочную) строку, второй — указывает на выделение 3-ей подстроки в каждой последующей строке файла.
Строка активного пользователя имеет такой вид:
имя_пользователя имя_сессии идентификатор_сессии статус .
Третьей подстрокой будет идентификатор сессии и все у нас правильно.
Но для отключенного пользователя ситуация другая:
имя_пользователя идентификатор_сессии статус .
Третьей подстрокой в данном случае будет статус и команда logoff отработает с ошибкой.
Использовать имя пользователя
Опубликовано 5 апреля, 2012 — 16:22 пользователем manager
Напрашивается решение использовать имя пользователя — первую подстроку. Но и тут не все благополучно, к имени пользователя под которым запущена команда Windows добавляет значок >
Стандартные способы обработки строк, например, %%i:
2% в цикле не работают. У меня точно не заработало, хотя потратил часа 2.
ну у меня получилось, вот
Опубликовано 3 марта, 2015 — 21:48 пользователем kenny_rim (не проверено)
ну у меня получилось, вот содержимое моего bat-файла:
query user >user.txt
for /f «skip=1 tokens=2,» %%i in (user.txt) DO logoff %%i
т.е. он завершает или RDP-TCP# или код ID(там где пользователь отключен (disconnect))
единственный момент, в именах пользователей не должно быть пробелов(я их заменил на _) иначе неотработает.
В ковычки имена зикинь и
Опубликовано 17 марта, 2016 — 11:38 пользователем Асден (не проверено)
В ковычки имена зикинь и будет ок
Powershell
Опубликовано 5 апреля, 2012 — 16:27 пользователем manager
Не получается в BAT попробуем в powershell. Почитав что уже есть наработанного удивленно увидел, что большинство скриптов базируется на той же самой quser (query user) Вывод команды сохраняется в строковый массив $users=quser и далее из строк извлекаются имена пользователей.
Все скрипты либо маленькие, но не учитывающие изменение строки для отключенного пользователя, либо далеки от прозрачности. В общем некрасивый, но выход.
Анализ процессов
Опубликовано 5 апреля, 2012 — 16:37 пользователем manager
Вернемся к постановке задачи. Проводится архивация, ей могут помешать определенные приложения. То есть мы можем получить список процессов по условию, посмотреть под кем они запущены и завершить сеансы соответствующих пользователей.
Конкретный пример, завершение работы всех пользователей, от имени которых запущен «толстый клиент» 1с 8.2 (1cv8.exe)
$1cv8 = Get-WMIObject win32_process | where <$_.ProcessName -eq "1cv8.exe">
foreach ($proc in $1cv8)
<
logoff $proc.SessionID
>
небольшая доработка
Опубликовано 5 июня, 2019 — 22:42 пользователем Антон (не проверено)
$nameproc = «1cv8s.exe»,»1cv8c.exe»,»1cv8.exe»
foreach ($name in $nameproc)
<
$1cv8 = Get-WMIObject win32_process | where <$_.ProcessName -eq $name>
if ($1cv8)
<
foreach ($proc in $1cv8)
<
logoff $proc.SessionID
>
>
>
Побочный эффект
Опубликовано 5 апреля, 2012 — 16:45 пользователем manager
Экспериментируя с query session нашел интересный способ как одной командой отключить (не завершить работу) всех RDP пользователей от сервера.
Последняя строка отображает сессию rdp-tcp с идентификатором 65536. Эта сессия называется Listener она по умолчанию привязана к протоколу RDP и служит для создания пользовательских сессий RDP.
Если мы завершим ее, то произойдет отключение всех RDP сессий.
Windows server завершить сеансы всех пользователей
Добрый день! Уважаемые читатели и гости IT портала Pyatilistnik.org. Вчера я вас научил определять номер и ID сеанса пользователя на RDS ферме или терминальном сервере. Там я вам рассказывал, что это нужно в случаях, когда вам необходимо завершить сессию пользователя, по ряду причин, одна из таких, это просто ее зависание. После чего человек и подключиться не может заново и не может выйти из своего сеанса. Вы как администратор, должны уметь решать проблему с зависшими RDP сессиями, ниже я покажу свои методы и алгоритмы.
Описание проблемы
Есть RDS ферма из 15 хостов подключений на Windows Server 2012 R2. Сервера на то они и сервера, что работают постоянно. Если у вас на ферме не настроены тайм ауты времени беспрерывной работы, то пользователи могут неделями или месяцами висеть в авторизованных подключениях. Логично предположить, что это не очень хорошо и ведет к различным последствиям, одно из которых, это полное зависание сеанса, при котором человек не может подключиться к терминальному серверу и видит сообщение «Работает служба профилей пользователей» или еще вариант «Не удается завершить требуемую операцию», я уже не говорю про повреждение пользовательского профиля. В результате того, что RDS брокеры видят. что пользователь уже залогинен, они не дают ему переподключиться к другому Session Host серверу, даже если вы закроете на текущем новые подключения. Пока вы не сделаете выход пользователя из системы для этой сессии, она так и будет мешать. Давайте разбираться, как это делать.
Методы завершения сессии пользователя не терминале
Существует несколько методов позволяющие выкинуть пользователя с сервера.
- Завершить сессию пользователя (Сделать log off) вы можете из оснастки управления RDS фермой
- Разлогинить пользователя можно и на самом терминальном сервере из диспетчера задач
- Выход пользователя можно выполнить из утилиты командной строки rwinsta
- Утилита командной строки log off
- Утилита reset session
- * Командлет Stop-TSSession
Как выкинуть пользователя из оснастки управления RDS
И так, у меня есть мой любимый, тестовый пользователь в Active Directory, по имени Барбоскин Геннадий Викторович. Предположим, что он зашел на терминальный стол и нам по причине зависания его сессии, нужно сделать ему выход. Первый метод, это использование оснастки по управлению RDS фермой, я вам рассказывал, как ее собирать. Открываем раздел с вашей коллекцией RDS фермы. В поисковом фильтре указываем логин или фамилию нужного сотрудника. В результате получаем хост, где он работает.
Щелкаем по нему правым кликом. В контекстном меню будет пункт «Выйти», это и соответствует завершению сессии (Log off). Так же есть пункт «Отключиться», если выберите его, то пользователь будет выброшен с терминального сервера, но его сессия останется на нем, данная операция равносильна тому, если пользователь просто нажал в окне с названием терминального сервера крестик.
После того, как вы выбрали пункт «Выйти», начнется корректное завершение сессии пользователя на RDS ферме. Сам пользователь увидит сообщение «Работает служба профилей пользователей» и у него закроется окно без ошибки.
Второй метод разлогинить пользователя на терминальном сервере
Второй метод, похож на первый, за исключением того, что нам необходимо залогиниться на нужный сервер, открыть оснастку «Диспетчер задач» и уже из него произвести выход пользователя. Сказано сделано, о том, как вам попадать на нужного участника RDS фермы я рассказывал. Далее щелкаем правым кликом по области пуска и из контекстного меню выбираем пункт «Диспетчер задач». Кстати, вызвать «Диспетчер задач» можно и через сочетание клавиш CTRL+SHIFT+ESC.
Находим нужного нам пользователя и щелкаем по нему правым кликом, в контекстном меню. нас будет интересовать пункт «Выйти». Выбираем его и завершаем сессию пользователя.
Использование утилиты RWINSTA
Если вы попали в ситуацию, когда графические методы не позволяют вам произвести выход пользователя из системы, а это необходимо, то вам на помощь придут утилиты из командной строки. RWINSTA — это встроенная в Windows утилита, которая позволяет сбрасывать сессии, по ID и имени сеанса. Первым делом вам нужно вычислить или ID сессии или ее имя, я вам рассказывал, о всех известных мне методах. можете ознакомиться. Я выберу утилиту qwinsta. Пишем команду:
или удаленно qwinsta /server:имя сервера | findstr barboskin.g
В моем примере имя сеанса rdp-tcp#172 и ее ID 515. Пишем команду:
И в первом и во втором случае, пользователь будет разлогинен с данного сервера. Данную команду можно запускать удаленно, со своего рабочего места, главное, чтобы были права на log off. Данный метод меня ни раз выручал в моей практике, например случай с зависшей сессией на Windows Server 2016, где вместо логина пользователя было имя (4).
Как отключить пользователя через reset session
Завершить сессию пользователя можно и с помощью утилиты командной строки Reset Session. В текущем примере у моего Барбоскина Геннадия Викторовича имя сеанса rdp-tcp#16 с его ID 11. Данную утилиту можно применять как локально на самом терминальном сервере, так и на своей рабочей станции, тут так же есть ключ /server.
Подробнее про утилиту reset session вы можете почитать на сайте Microsoft — https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/reset-session
Как отключить пользователя через logoff
Разлогинить пользовательскую учетную запись и даже зависшую, можно и через утилиту командной строки «LogOff». В данном примере у Геннадия Барбоскина имя сессии rdp-tcp#43. В командной строке от имени администратора введите:
Выход пользователя через командлет Stop-TSSession
Есть такой замечательный командлет Stop-TSSession. Посмотрим на сервере ID и имя сеанса, для этого в открытой оболочке PowerShell введите:
В итоге я вижу, что у пользователя barboskin.g SessionID 3. Далее пишем
Соглашаемся с тем, что будет производиться log off для данного пользователя. Проверяем, что сессия завершена. Можно вот таким простеньким скриптом из планировщика задач, разлогинивать сессии:
Выход пользователя через командлет Stop-TerminalSession
Данный командлет устанавливается отдельно, совместно с пакетом Pscx. Первым делом посмотрим локально или удаленно идентификаторы сессии пользователя, для которого мы хотим сделать log off. Выполняем команду:
Нужный мне ID сеанса 427. Далее воспользуемся командлетом Stop-TerminalSession, чтобы выкинуть пользователя и завершить его сессию.
Автоматическое завершение сеансов подключенных пользователей к терминальному серверу Windows Server 2008 R2
Сегодня я расскажу как я решал одну интересную задачу. Задача состояла в том чтобы а автоматическом режиме завершать сеансы всех подключенных пользователей к терминальному серверу (он у нас на базе Windows Server 2008 R2), кроме определенного пользователя и в конце запустить bat файл. Т.е. как на скрине ниже, список всех подключенных пользователей к терминальнику и нужно всех культурно выбить кроме например пользователя с ID 10 и выполнить некий скрипт.
Средством достижения поставленной задачи был выбран путь написание своей небольшой утилиты, которая будет все это делать. Средством разработки утилиты был выбран любимый мной Delphi.
В итоге вот что получилось. Принцип работы утилиты:
- Определяются все активные на данный момент сеансы пользователей (Консольные и RDP-ные подключения)
- Подгружается список исключаемых пользователей из файла Exclude_users.ini
- Идет сравнение активных пользователей и исключаемых, если среди активных пользователей находится исключаемый то он не попадает в список на завершения сеансов пользователей
- Посылается запрос на принудительное завершение сеанса всем пользователям которые попали в список на отключение
- Формируется отчет (\Log\(текущая дата)\Report.txt)
- По желанию можно по окончанию завершения сеансов RDP пользователей, можно запустить скрипт bat.
Рабочее окно программы:
Основные пояснения по интерфейсу:
- Кнопка Формировать — собственно получается список всех активных и не корректно завершенных сеансов.
- Кнопка Завершение сеансов — Собственно выполнение завершения сеансов всех пользователей, кроме исключаемых пользователей. По окончании процесса завершения сеансов, в случае если стоит галочка (Запустить скрипт (.bat)) то выполнится указанный скрипт.