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

Аватара пользователя
hse2000

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

Сообщение hse2000 »

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





Код:

Код: Выделить всё

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



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

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

Сообщение amel27 »

убить заданную сессию можно через штатную утилиту rwinsta, пример:

Код:

Код: Выделить всё

rwinsta 5 /server:MyServer

здесь "5" - номер сессии, список сессий можно получить аналогично:



Код:

Код: Выделить всё

qwinsta /server:MyServer

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



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

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

Сообщение wufer »

а можно сделать скрипт просто для сброса активных пользователей терминалов не перечисляя всех, например для резервного копирования баз 1с
Аватара пользователя
hse2000

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

Сообщение hse2000 »

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

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

Сообщение hse2000 »

по памяти ошибся, сегодня на работе получилось вот что (с 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%
Аватара пользователя
hse2000

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

Сообщение hse2000 »

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





Код:

Код: Выделить всё

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. Где может быть косяк?
Аватара пользователя
Vadikan

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

Сообщение Vadikan »

Цитата hse2000:



видно, что rwinsta берет, не имя сессии, а имя юзера
VBS/WSH/JS - [решено] скрипт с завершением сеанса определенного пользователя




понятно - я пробовал на отключенных сессиях, на активных появляется долнительный столбец 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%
   )
)
Аватара пользователя
amel27

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

Сообщение amel27 »

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

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

Сообщение hse2000 »

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

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

Сообщение hse2000 »

Цитата bazik83:



если нужно отключить несколько пользователей
VBS/WSH/JS - [решено] скрипт с завершением сеанса определенного пользователя






Код:

Код: Выделить всё

@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
Ответить

Вернуться в «Скриптовые языки администрирования Windows»