Я ищу способ закрыть все активные сеансы удаленного рабочего стола на компьютере (локальном компьютере). Windows включает несколько команд (rwinsta, qwinsta и т. д.) для просмотра активных сеансов, но я не вижу, как я мог бы легко использовать эту информацию (если только я не проанализирую строку...), чтобы закрыть все сеансы.
Есть ли способ в Powershell (или C#, Batch) закрыть все сеансы удаленного рабочего стола на локальном компьютере?
Спасибо, Мартин.
решение1
Вы можете попробовать использовать недокументированный /sm
параметр for query session
(в пакетном файле), чтобы упростить сортировку:
FOR /f %%G IN ('query session /sm') DO tsdiscon %%G
решение2
Да, используя tsdiscon из командной строки:
tsdiscon n
где n следует заменить на идентификатор сеанса.
Номер сеанса можно узнать здесь
query session
Поскольку вы говорите, что хотите закрытьвсесеансы на локальном компьютере, я думаю, вам нужно будет быть внимательным с порядком, в котором вы это делаете (т. е. закройте сеанс в последнюю очередь).
решение3
Вы можете использоватьtsdisconутилита для отключения сеансов. Если вы используете команду "query sessions" из командной строки, вы можете увидеть список идентификаторов, а затем выполнить команду tsdiscon для каждого из них.
Такая конструкция цикла должна работать.
FOR /f %%G IN ('q.bat') DO tsdiscon %%G
где находится q.bat
query session /sm | find "Active"
Это приведет только к отключению удаленных сеансов и игнорированию пользователя консоли.
решение4
Вы можете использовать модуль PowerShell PSTerminalServices:
Get-TSSession -ComputerName server1 -State Active | Disconnect-TSSession -WhatIf