Estou procurando uma maneira de fechar todas as sessões ativas da Área de Trabalho Remota em um computador (computador local). O Windows inclui alguns comandos (rwinsta, qwinsta, etc.) para ver as sessões ativas, mas não vejo como poderia facilmente usar as informações (a menos que eu analise a string...) para fechar todas as sessões.
Existe uma maneira no Powershell (ou C#, Batch) de fechar todas as sessões da Área de Trabalho Remota em um computador local?
Obrigado, Martinho
Responder1
Você poderia tentar usar o /sm
parâmetro não documentado for query session
(em um arquivo em lote) para classificar as coisas com mais facilidade:
FOR /f %%G IN ('query session /sm') DO tsdiscon %%G
Responder2
Sim, usando tsdiscon em uma linha de comando:
tsdiscon n
onde o n deve ser substituído pelo ID da sessão.
Você pode obter o número da sessão em
query session
Já que você diz que quer fechartodossessões no computador local, acho que você precisará ter cuidado com a ordem em que faz isso (ou seja, feche sua sessão por último).
Responder3
Você pode usar otsdisconutilitário para desconectar sessões. Se você usar o comando "query session" em um prompt de comando, poderá ver a lista de IDs e, em seguida, emitir um comando tsdiscon para cada um.
Uma construção de loop como esta deve funcionar
FOR /f %%G IN ('q.bat') DO tsdiscon %%G
onde q.bat está
query session /sm | find "Active"
Isso apenas desconectará as sessões remotas e ignorará o usuário do console.
Responder4
Você pode usar o módulo PSTerminalServices PowerShell:
Get-TSSession -ComputerName server1 -State Ativo | Desconectar-TSSession -WhatIf