Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/225: Рейтинг темы: голосов - 225, средняя оценка - 4.92
1 / 1 / 0
Регистрация: 23.12.2011
Сообщений: 5
1

Завершение сеансов удаленных пользователей

23.12.2011, 09:03. Показов 41709. Ответов 32
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем добрый день и с Наступающим всех!!!

Такой вопрос: Есть пользователи, которые логинятся на сервер(2008) с удаленных раб мест. После работы их сеансы продолжают висеть в статусе "Disconnected". Решил сделать батник который будет выпинывать пользователей кроме Администратора. Поискал в инете и на этом сайте, в итоге сделал вот, что:

Bash
1
2
3
query session >logoff.txt
FIND /V "Admin" logoff.txt >logoff2.txt
for /F"skip=2 tokens=3," %%i in (logoff2.txt) DO c:\Windows\System32\logoff.exe %%i
Но не робит. Мб это как то умнее делается без 2х вспомогательных файлов или с другой командой?
Буду рад любой помощи. Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2011, 09:03
Ответы с готовыми решениями:

Завершение сеанса пользователей на терминальном сервере (RDP)
Помогите со скриптом, суть такая есть терминальный сервер, необходима завершать сессии по...

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

Завершение сеансов всех пользователей и их программ в определенное время
Добрый день, коллеги, такой вопрос - если можно Как в windows server 2012R2 создать задание по...

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

32
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
23.12.2011, 12:23 2
А у вас сама команда query session "робит" ?
У меня такой не находит.
0
1 / 1 / 0
Регистрация: 23.12.2011
Сообщений: 5
23.12.2011, 13:48  [ТС] 3
Да, работает. Записывает в файл сессии. Вот пример записи в файле:
Завершение сеансов удаленных пользователей


Если просто написать Logoff 3, то сессию закрывает, а в цикле не хочет.
Мб тогда подскажите, как мне скопировать с одного файла в другой лишь 1 столбец?
Тогда я с файла, что представил на рисунке скопирую столбец "ID" в новый текстовый файл,
а в нем переберу циклом все числа подставив их в logoff.
Или как мне при обходе файла циклом for, выгружать в другой файл только столбец "ID" в
каждой строке?
Заранее спасибо.
0
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
23.12.2011, 16:41 4
Bash
1
for /F"tokens=3 delims=[TAB_надо_прописать_в_батнике]" %%i in (logoff2.txt) DO (c:\Windows\System32\logoff.exe "%%i")
Мб так?
0
1 / 1 / 0
Регистрация: 23.12.2011
Сообщений: 5
27.12.2011, 08:29  [ТС] 5
К сожалению не работает.
А "Мб тогда подскажите, как мне скопировать с одного файла в другой лишь 1 столбец?" сложно реализовать?
0
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
28.12.2011, 00:40 6
Киньте пример, в формате текстового файла (а не скрина), и скажите какой столбец надо в другой файл записать.
0
1 / 1 / 0
Регистрация: 23.12.2011
Сообщений: 5
28.12.2011, 12:24  [ТС] 7
Только столбец "ID". Чтоб новый файл содержал только номера ID и все.logoff2.txt
1
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
29.12.2011, 18:37 8
Это блин, не столбец...здесь, то пустая строка первого столбца, то второго.

Добавлено через 18 минут
В частном случае можно попробовать такое подобие кода:
Bash
1
2
setlocal enabledelayedexpansion
for /f "tokens=2,3" %%i in ('query session ^| findstr /v /c:"Admin" ^| findstr /r /c:"[0-9]"') do ((if not "%%i"=="0" (set /a x=%%i&if not "!x!"=="0" (c:\Windows\System32\logoff.exe %%i)) else (c:\Windows\System32\logoff.exe %%i))&(if not "%%j"=="0" (set /a y=%%j&if not "!y!"=="0" (c:\Windows\System32\logoff.exe %%j)) else (c:\Windows\System32\logoff.exe %%j)))
1
887 / 189 / 16
Регистрация: 18.07.2011
Сообщений: 260
30.12.2011, 09:22 9
В частном случае можно сделать и так:
Bash
1
2
3
4
5
6
7
8
:: out_id.cmd
@echo off
del yourfile.txt
for /f "delims=`" %%S in (logoff2.txt) do (call :outid "%%S" >>yourfile.txt)
exit
:outid
set line=%~1
echo. %line:~42,4%
2
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
30.12.2011, 12:20 10
Тогда уж лучше так:
Bash
1
2
3
4
5
6
7
8
9
@echo off
for /f "delims=`" %%S in ('query session ^| findstr /V /c:"Admin"') do (call :outid "%%S")
exit
:outid
set line=%~1
if "%line:~44,2%"=="" exit /b
if "%line:~44,2%"=="ID" exit /b
if "%line:~44,1%"==" " ("C:\Windows\System32\logoff.exe" %line:~45,1%) else ("C:\Windows\System32\logoff.exe" %line:~44,2%)
exit /b
2
1 / 1 / 0
Регистрация: 23.12.2011
Сообщений: 5
05.01.2012, 07:19  [ТС] 11
Большое спасибо, работает, плюсую за помощь).
0
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 10
01.06.2013, 12:19 12
Добрый день!
Отличный скрипт. Но я не могу добиться того, чтобы он выполнялся без запроса на подтверждение.
Суть задачи в том, чтобы скрипт выполнялся шедулером и завершал сессии всех пользователей.
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
01.06.2013, 12:24 13
Цитата Сообщение от rez0n Посмотреть сообщение
без запроса на подтверждение.
а что говорит?
0
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 10
01.06.2013, 15:59 14
Говорит следующее.
If you reset this session, all users using this protocol will be logged off,
Continue (n=no)?
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
01.06.2013, 16:19 15
Bash
1
echo Y| logoff
0
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 10
01.06.2013, 16:58 16
Аналогично.

Попробовал вставить как в конец скрипта, так и перед последним exit
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
01.06.2013, 17:21 17
маленькую y пробовали?
И как у Вас теперь код выглядит?
0
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 10
01.06.2013, 17:24 18
Выглядит так.
Bash
1
2
3
4
5
6
7
8
9
10
@echo off
for /f "delims=`" %%S in ('query session ^| findstr /V /c:"support"') do (call :outid "%%S")
exit
:outid
set line=%~1
if "%line:~44,2%"=="" exit /b
if "%line:~44,2%"=="ID" exit /b
if "%line:~44,1%"==" " ("C:\Windows\System32\logoff.exe" %line:~45,1%) else ("C:\Windows\System32\logoff.exe" %line:~44,2%)
exit /b
echo Y| logoff
Пробовал и маленькой и без logoff. До и после последнего exit /b
Bash
1
2
3
4
echo Y| logoff
echo y| logoff
echo Y
echo y
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
01.06.2013, 17:34 19
Тогда завершайте сначала сессии всех пользователей, а уже затем хоста: Выполнить LOGOFF для всех пользователей, кроме себя
0
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 10
01.06.2013, 17:40 20
В этой теме немного не то. И я не понял что Вы имели ввиду здесь "а уже затем хоста".
На самом деле - мне нужно выполнить logoff абсолютно для всех пользователей. Может это упростит задачу и сократит батник до 2х строк?
Взял за основу сабжевый скрипт, так как мою учетку не обязательно завершать.
0
01.06.2013, 17:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2013, 17:40
Помогаю со студенческими работами здесь

Получение списка пользователей (консольного и rdp-сеансов)
собственно, необходимо получить список активных пользователей у которых консольный сеанс а так же...

Идентификация удаленных пользователей
Hi All! Есть процедура в БД, которая получает данные из локальных сетевых ресурсов от имени...

Как сбросить авторизацию удаленных пользователей?
Не стану поднимать новую тему, так как вопрос тоже по авторизации: Пользователь авторизовался,...

Невозможность подключиться к VPN для удаленных пользователей
Здравствуйте! У меня следующий вопрос: можно ли сделать так, чтобы при включенном VPN ко мне могли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru