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 examinar as sessões ativas, mas não vejo como poderia facilmente usar as informações (a menos que analise a sequência ...) para fechar todas as sessões.
Existe uma maneira no Powershell (ou C #, Lote) de fechar todas as sessões da Área de Trabalho Remota em um computador local?
Obrigado, Martin
Respostas:
Você pode tentar usar o
/sm
parâmetro não documentado paraquery session
(em um arquivo em lotes) para classificar as coisas mais facilmente:fonte
Sim, usando tsdiscon em uma linha de comando:
onde n deve ser substituído pelo ID da sessão.
Você pode obter o número da sessão em
Como você diz que deseja fechar todas as sessões no computador local, acho que precisará ter cuidado com a ordem em que faz isso (por exemplo, feche sua sessão por último).
fonte
Convém verificar Powershell Community Extensions. Inclui os cmdlets Get, Stop e Disconnect TerminalSession.
fonte
Você pode usar o utilitário tsdiscon para desconectar sessões. Se você usar o comando "query sessions" em um prompt de comando, poderá ver a lista de IDs e emitir um comando tsdiscon para cada um.
Uma construção em loop como esta deve funcionar
onde q.bat está
Isso desconectará apenas sessões remotas e ignorará o usuário do console.
fonte
Você pode desconectar sessões locais ou remotas com o tsdiscon.
fonte
Descobri que o TSDISCON não remove as sessões conectadas "Disco".
Substituí o TSDISCON pelo logoff.
fonte
Você pode usar o módulo PSTerminalServices PowerShell:
http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2010/02/22/psterminalservices-powershell-module-for-terminal-services.aspx
Get-TSSession -ComputerName server1 -State Ativo | Disconnect-TSSession -WhatIf
fonte
Sei que o OP está bastante antigo agora, mas isso deve fazer o que você procura (e caso alguém ainda esteja procurando algo para fazer o mesmo, pensei em responder de qualquer maneira).
Da mesma forma, você pode usar
query/reset session
no lugar deq/rwinsta
...fonte
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)
fonte
O comando TSDiscon desconectará as sessões dos serviços de terminal (RDP). Quando usado sozinho, desconectará a sessão atual, você pode especificar o ID da sessão que deseja desconectar, também pode fornecer o nome do servidor para desconectar.
Detalhes completos podem ser encontrados aqui .
fonte
Você não especificou se deseja fazer isso sem desligar ou reiniciar o computador. Mas se você não se importa em reiniciar ou desligar, basta ligar para:
Isso realmente forçará a reinicialização do computador.
fonte
Mesmo a pergunta é muito antiga, quase não existem soluções para todas as versões sem qwinsta / query / tsdiscon, ou seja, todas as versões domésticas do Windows.
No entanto, existe uma versão fácil do PowerShell para desconectar uma sessão:
Um ID de sessão pode ser obtido, por exemplo, com
getProcesss
. Para desconectar (não fazer logoff!) Uma sessão, use$tstType::DisconnectSession("localhost", 2)
.fonte