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

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

Ответить
Настройки темы
VBS/WSH/JS - [решено] скрипт с завершением сеанса определенного пользователя

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


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

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


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

Код: Выделить весь код
Option Explicit
Dim strComputer       
Dim strNamespace      
Dim strClass          
Dim objClass         
Dim colInstances     
Dim objInstance      
strComputer = "."
strNamespace = "Root\CIMV2"
strClass = "Win32_OperatingSystem"

Set objClass = GetObject("WinMgmts:\\" & strComputer & _
                         "\" & strNamespace & ":" & strClass)
Set colInstances = objClass.Instances_

For Each objInstance In colInstances
  objInstance.Win32Shutdown (4)      
Next

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

Отправлено: 12:38, 27-02-2009

 

Googler


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

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


убить заданную сессию можно через штатную утилиту rwinsta, пример:
Код: Выделить весь код
rwinsta 5 /server:MyServer
здесь "5" - номер сессии, список сессий можно получить аналогично:
Код: Выделить весь код
qwinsta /server:MyServer
понятно, что "убить" сессию и осуществить "выход из системы" с закрытием всех программ - вещи разные, но мне неизвестны способы удаленного завершения чужих сессий... по идее, подключаться к терминальной сессии и запускать в ней любую программу должна уметь PsExec (ключ "-i"), но мне не удалось этого добиться, и судя по форуму поддержки я такой не один

Как вариант: вставить при логоне запуск скрипта, который будет крутиться в фоне каждой сессии и делать "выход" по заданному условию (файл, ключ реестра, etc.)

Последний раз редактировалось amel27, 04-03-2009 в 12:41. Причина: qwinsta --> rwinsta


Отправлено: 12:30, 02-03-2009 | #2



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

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


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


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

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


Тогда назревает вопрос, а можно ли пользователю приклеить статичный sessionid или sessionname?

Отправлено: 17:35, 02-03-2009 | #3


Googler


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

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


по памяти ошибся, сегодня на работе получилось вот что (с XP-RU проверил):
Код: Выделить весь код
@Echo Off

Set SERVER=MyServer
Set KILLME=Администратор

For /F "Tokens=1,2 Skip=3 Delims= " %%i In ('qwinsta /Server:%SERVER%') Do If "%%i"=="%KILLME%" rwinsta %%j /Server:%SERVER%

Отправлено: 12:39, 04-03-2009 | #4


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


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

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


вообщем вот что получается, если батник выглядит так

Код: Выделить весь код
Set SERVER=2003test
Set KILLME=test1

For /F "Tokens=1,2 Skip=3 Delims= " %%i In ('qwinsta /Server:%SERVER%') Do If "%%i"=="%KILLME%" rwinsta %%j /Server:%SERVER%
,
test1 - имя юзера то имеем

Код: Выделить весь код
C:\Documents and Settings\Administrator>Set SERVER=2003test

C:\Documents and Settings\Administrator>Set KILLME=test1

C:\Documents and Settings\Administrator>For /F "Tokens=1,2 Skip=3 Delims= " %i I
n ('qwinsta /Server:2003test') Do If "%i" == "test1" rwinsta %j /Server:2003test


C:\Documents and Settings\Administrator>If "rdp-tcp#8" == "test1" rwinsta test1
/Server:2003test

C:\Documents and Settings\Administrator>
видно, что rwinsta берет, не имя сессии, а имя юзера.

Если меняем %j на %i, то получается все правильно

Код: Выделить весь код
C:\Documents and Settings\Administrator>C:\test\3.bat

C:\Documents and Settings\Administrator>Set SERVER=2003test

C:\Documents and Settings\Administrator>Set KILLME=test1

C:\Documents and Settings\Administrator>For /F "Tokens=1,2 Skip=3 Delims= " %i I
n ('qwinsta /Server:2003test') Do If "%i" == "test1" rwinsta %i /Server:2003test


C:\Documents and Settings\Administrator>If "rdp-tcp#8" == "test1" rwinsta rdp-tc
p#8 /Server:2003test
НО!!!!!! команда rwinsta тогда не отрабатывает.... пробовал до rwinsta писать goto на след. строчку, чтобы она выполнялась с новой строки, но тогда пишется session %i not found. Где может быть косяк?

Последний раз редактировалось hse2000, 07-03-2009 в 12:35.


Отправлено: 18:01, 06-03-2009 | #5


(*.*)


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

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


hse2000, используйте тег [code][/code], плиз.

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 00:02, 07-03-2009 | #6


Googler


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

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


Цитата hse2000:
видно, что rwinsta берет, не имя сессии, а имя юзера »
понятно - я пробовал на отключенных сессиях, на активных появляется долнительный столбец ID:
Код: Выделить весь код
Set SERVER=2003test
Set KILLME=test1

For /F "Tokens=1-4 Skip=3 Delims=# " %%i In ('qwinsta /Server:%SERVER%') Do (
   If "%%i"=="rdp-tcp" (
      If "%%k"=="%KILLME%" rwinsta %%l /Server:%SERVER%
   ) Else (
      If "%%i"=="%KILLME%" rwinsta %%j /Server:%SERVER%
   )
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:29, 09-03-2009 | #7


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


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

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


спасибо, все работает. Можно скриптик добавлять в коллекцию =

Отправлено: 14:58, 10-03-2009 | #8


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


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

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


Подскажите, как доработать скрипт если нужно отключить несколько пользователей?

-------
erazina.ru - Свадебная фотография


Отправлено: 21:21, 22-05-2010 | #9


Googler


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

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


Цитата bazik83:
если нужно отключить несколько пользователей »
Код: Выделить весь код
@Echo Off

Call :KILLME server1 user1
Call :KILLME server1 user2

Exit /B

:KILLME
 For /F "Tokens=1-4 Skip=3 Delims=# " %%i In ('qwinsta /Server:%~1') Do (
 If /I "%%i"=="%~2" rwinsta %%j /Server:%~1
 If /I "%%k"=="%~2" If /I "%%i"=="rdp-tcp" rwinsta %%l /Server:%~1)
GoTo :EOF

Отправлено: 06:09, 23-05-2010 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Вирус для определенного доменного пользователя. rivera Лечение систем от вредоносных программ 10 01-10-2009 13:01
CMD/BAT - [решено] Зпуск программы с правами определенного пользователя Bint Скриптовые языки администрирования Windows 2 23-09-2009 22:53
Загрузка - [решено] Принудительная загрузка определенного пользователя. Nird Microsoft Windows 2000/XP 1 21-04-2009 17:26
[решено] Скрипт для корректировки данных пользователя в AD HLT Microsoft Windows NT/2000/2003 2 04-07-2008 10:32
Доступ - Выполнить Скрипт от пользователя yastreb_oren Microsoft Windows 2000/XP 6 19-04-2008 11:14




 
Переход