Сценарии - Как разъединить сессии Удаленного рабочего стола?

Взгляните на OVH, они предлагают услугу RPS, которая является по существу бездисковой системой, подключенной к большому SAN. Они также предлагают услуги стиля VPS также.

8
задан 13 July 2009 в 21:27
12 ответов

Вы могли попытаться использовать недокументированное /sm параметр для query session (в пакетном файле) к вещам вида более легко:

FOR /f %%G IN ('query session /sm') DO tsdiscon %%G
4
ответ дан 2 December 2019 в 22:48
  • 1
    That' s хорошее начало..., но я хочу разъединить только сессии Удаленного рабочего стола. –  Martin 14 July 2009 в 08:04

Да, с помощью tsdiscon из командной строки:

tsdiscon n

где n должен быть заменен идентификатором сессии.

Можно получить число сессии от

query session

Так как Вы говорите, что хотите закрыть все сеансы на локальном компьютере, я предполагаю, что необходимо будет быть осторожны относительно порядка, в котором Вы делаете это (т.е. закройте свой сеанс в последний раз).

4
ответ дан 2 December 2019 в 22:48

Можно хотеть проверить Общественные Расширения Powershell. Это включает, Добираются, Остановка и TerminalSession cmdlets Разъединения.

2
ответ дан 2 December 2019 в 22:48

Можно использовать tsdiscon утилиту для разъединения сессий. При использовании "команды" сессий запроса от командной строки Вы видите список идентификаторов и затем даете tsdiscon команду для каждого.

Конструкция цикличного выполнения как это должна работать

FOR /f %%G IN ('q.bat') DO tsdiscon %%G

где q.bat

query session /sm | find "Active"

Это только разъединит удаленные сеансы и проигнорирует пользователя консоли.

2
ответ дан 2 December 2019 в 22:48

Можно разъединить локальные или удаленные сеансы с tsdiscon.

Disconnects a terminal session.

TSDISCON [sessionid | sessionname] [/SERVER:servername] [/V]

  sessionid           The ID of the session.
  sessionname         The name of the session.
  /SERVER:servername  Specifies the Terminal server (default is current).
  /V                  Displays information about the actions performed.
1
ответ дан 2 December 2019 в 22:48

Команда TSDiscon разъединит службы удаленных рабочих столов (RDP) сессии. Используемый самостоятельно разъединит текущую сессию, можно указать идентификатор сессии сессии, которую Вы хотите разъединить, можно также предоставить имя сервера для разъединения от.

Полное изложение может быть найдено здесь.

0
ответ дан 2 December 2019 в 22:48

Вы не указывали, хотите ли Вы сделать это с закрытием или перезапуском компьютера. Но если Вы не возражаете против перезапуска или завершения работы, можно просто звонить:

shutdown -r -f -m \\computer_to_restart

Это на самом деле вызовет перезапуск компьютера.

0
ответ дан 2 December 2019 в 22:48
  • 1
    Хорошо... that' s идея. Но я don' t хотят уничтожить все сессии. Только сессии удаленного рабочего стола. –  Martin 13 July 2009 в 21:43

Я нашел, что TSDISCON не удаляет "Диск" onnected сессии.

Я заменил TSDISCON выходом из системы.

1
ответ дан 2 December 2019 в 22:48

Можно использовать модуль PSTerminalServices PowerShell:

http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2010/02/22/psterminalservices-powershell-module-for-terminal-services.aspx

Доберитесь-TSSession - Имя компьютера server1 - состояние, Активное | Разъединение-TSSession-WhatIf

1
ответ дан 2 December 2019 в 22:48

Я знаю, что OP довольно старый, но он должен делать то, что вам нужно (и если кто-то еще ищет что-то, чтобы сделать то же самое, я думал, что все равно отвечу) .

Аналогичным образом вы можете использовать сеанс запроса / сброса вместо q / rwinsta ...

FOR /F %%A IN (computers.txt) DO (
    FOR /f "tokens=2" %%i IN ('qwinsta /SERVER:%%A ^| find /i "disc"') DO ECHO %%i | rwinsta %%i /SERVER:%%A /V
)
1
ответ дан 2 December 2019 в 22:48

FOR / F% A IN (c: \ scripts \ ps \ computers.txt) DO (FOR / f "tokens = 2 "% i IN ('qwinsta / SERVER:% A ^ | find / i" disc "') ** DO if"% i "NEQ" 0 "ECHO% i ** | rwinsta% i / SERVER:% A / V )

1
ответ дан 2 December 2019 в 22:48

Даже вопрос очень старый, почти нет решений для всех версий без qwinsta / query / tsdiscon, а именно для всех домашних версий Windows.

Однако существует простая версия PowerShell для отключения сеанса:

$code = @'
[DllImport("wtsapi32.dll")]
static extern IntPtr WTSOpenServer([MarshalAs(UnmanagedType.LPStr)] String pServerName);

[DllImport("wtsapi32.dll")]
static extern void WTSCloseServer(IntPtr hServer);

[DllImport("Wtsapi32.dll")]
static extern bool WTSDisconnectSession(System.IntPtr hServer, int SessionId, bool bWait);

public static void DisconnectSession (String ServerName, int SessionId)
{
    IntPtr serverHandle = WTSOpenServer(ServerName);
    WTSDisconnectSession(serverHandle, SessionId, true);
    WTSCloseServer(serverHandle);
}
'@

$tstType=Add-Type -name Test -MemberDefinition $code -PassThru
#$tstType::DisconnectSession("localhost", 2)

Можно получить идентификатор сеанса, например с getProcesss . Чтобы отключить (не выйти из системы!) Сеанс, используйте $ tstType :: DisconnectSession ("localhost", 2) .

0
ответ дан 15 March 2020 в 15:17

Теги

Похожие вопросы