Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] logoff disconnected users

Ответить
Настройки темы
CMD/BAT - [решено] logoff disconnected users

Пользователь


Сообщения: 85
Благодарности: 3

Профиль | Отправить PM | Цитировать


Добрый вечер!
Много времени потратил на поиск решения logoff для disconnected users с помощь скрипта.
Посредством групповой политики отрабатывает, но не 100%. У 2-3 пользователей сессии не закрываются (((
В итоге все что нашел и что испытал
1. Log Off all Terminal Server Session Users https://support.microsoft.com/en-us/...command-prompt
Код: Выделить весь код
query session >session.txt
for /f "skip=1 tokens=3," %%i in (session.txt) DO logoff %%i
del session.txt
Для ОС Win2k8 и выше, необходимо пропускать 2-е подстроки в строке (skip=2) что бы не обрабатывать учетные записи служб. Например «services».
Код: Выделить весь код
query session >session.txt
for /f "skip=2 tokens=3," %%i in (session.txt) DO logoff %%i
del session.txt
Но это все справедливо для пользователей, которые на данный момент активны в терминальной сессии, т.е есть параметры - Имя сеанса, - Пользователь, -ID сеанса.
Когда пользователь disconnected

эти скрипты не отрабатывают.

2. Нашел logoff скрипт, который применим для disconnected users https://stackoverflow.com/questions/...-administrator
Код: Выделить весь код
@echo off
for /f "skip=2 tokens=2,3 delims= " %%a in ('query session') DO (
    echo %%a|findstr /xr "[1-9][0-9]* 0" >nul && (
      logoff %%a 
    )
    echo %%b|findstr /xr "[1-9][0-9]* 0" >nul && (
      logoff %%b 
    )
)
Как я понял, данный скрипт производит сброс протоколов rdp-tcp и ica-tcp.
Но обязательно данные действия надо подтверждать.

Это не возможно, если автоматизировать данный скрипт через планировщик задач.

Модифицировать данный скрипт без подтверждения действий у меня не получилось. Жду советов и помощи в модификации скрипта.

Отправлено: 19:41, 14-11-2017

 

Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


echo y | logoff %%b - не?
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:48, 14-11-2017 | #2



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

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


Пользователь


Сообщения: 85
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата alpap:
echo y | logoff %%b - не? »
ДА ) Спасибо за столь быстрый и правильный ответ..
Но есть небольшое но. Не сработал перевод на новую строчку, и следующий вопрос пишется там где по конвейеру передалось значение "y".

Отправлено: 20:23, 14-11-2017 | #3


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата zhuk09:
Не сработал перевод на новую строчку »
добавьте его
echo y|logoff %%b& echo.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:03, 15-11-2017 | #4


Пользователь


Сообщения: 85
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата alpap:
добавьте его
echo y|logoff %%b& echo. »
Теперь скрипт выглядит следующим образом
Код: Выделить весь код
@echo off
for /f "skip=2 tokens=2,3 delims= " %%a in ('query session') DO (
    echo %%a|findstr /xr "[1-9][0-9]* 0" >nul && (
    echo y | logoff %%a& echo.	
    )
    echo %%b|findstr /xr "[1-9][0-9]* 0" >nul && (
    echo y | logoff %%b& echo. 
    )
)
Решил его проверить в более сложной ситуации:
1. 2 пользователя в состоянии disconnected
2. 1 пользователь в состоянии Active


После выполнении скрипта из консольного режима пользователя Backup появляется ошибка

и после этого команда query session выглядит следующим образом


Из всего этого можно сделать вывод, что данный скрипт производит LOGOFF только сессий в состоянии disconnected, а сессий в состоянии Active - СБРОС (о чем он собственно и пишет в предупреждении).
Цитата:
Ошибка [7024]:Не удается завершить требуемую операцию, поскольку терминальное соединение сейчас занято, выполняя операцию одну из операций: подключение, отключение, сброс, удаление.

Отправлено: 12:04, 15-11-2017 | #5


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


а что хоть надо-то в идале?
вот, например, отключить всех окромя себя:
Код: Выделить весь код
@echo on
for /f "skip=1 tokens=1-3" %%a in ('query user^|find /v ">"') do set/a id=%%c& cmd/v/c "if /i "%%a" neq "%Username%" (if !id!==0 (logoff %%b) else (logoff %%c))"
pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:39, 15-11-2017 | #6


Пользователь


Сообщения: 85
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата alpap:
а что хоть надо-то в идале? »
В идеале надо закрывать (Logoff) сессий которые в состоянии
1. Disconnected
2. Active
без всякой ругани в логах, и что САМОЕ главное - просто LOGOFF сессий, а не сброс сеанса по 2-м протоколам : rdp-tcp и ica-tcp

Цитата alpap:
вот, например, отключить всех окромя себя: »
сейчас проверю его на пользователях в состоянии Disconnected. Чуть позже напишу.

Отправлено: 14:28, 15-11-2017 | #7


Пользователь


Сообщения: 85
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата zhuk09:
сейчас проверю его на пользователях в состоянии Disconnected. Чуть позже напишу. »
Скрипт 100% рабочий и покрывает все потребности.
Единственно, хотелось бы модифицировать его так, что бы отключались все сессии, т.к данный скрипт будет выполняться из планировщика заданий Windows, и условие отключения всех кроме себя излишне...

Отправлено: 09:05, 16-11-2017 | #8


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата zhuk09:
всех кроме себя излишне.. »
по идее так, не проверял:
Код: Выделить весь код
@echo off
for /f "skip=1 tokens=1-3" %%a in ('query user') do set/a id=%%c& cmd/v/c "if !id!==0 (echo logoff %%b) else (echo logoff %%c))"
pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:54, 16-11-2017 | #9


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Подскажите, можно ли скрипт подправить, чтобы отключал (LogOff) всех пользователей, кроме активных ?
Код

@echo off
for /f "skip=1 tokens=1-3" %%a in ('query user^|find /v "Active"') do logoff %%b
pause

Последний раз редактировалось bulbashee, 09-03-2020 в 16:22.


Отправлено: 14:59, 08-03-2020 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] logoff disconnected users

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2012 R2 - remote app висят пользователи в disconnected dartne Windows Server 2012/2012 R2 11 10-02-2017 09:06
Прочее - Network link is disconnected anandashake Сетевое оборудование 10 11-03-2016 03:56
Win2000Server и Disconnected сессии k1sa Сетевые технологии 2 09-03-2006 15:11




 
Переход