Scripting - Como desconectar as sessões da Área de Trabalho Remota?

8

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 eu poderia facilmente usar as informações (a menos que eu analise a cadeia ...) 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 Martin

    
por Martin 13.07.2009 / 20:27

11 respostas

4

Você pode tentar usar o parâmetro /sm não documentado para query session (em um arquivo em lotes) para classificar as coisas com mais facilidade:

FOR /f %%G IN ('query session /sm') DO tsdiscon %%G
    
por 13.07.2009 / 21:39
4

Sim, usando tsdiscon a partir de 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

query session

Como você diz que deseja encerrar todas as sessões no computador local, eu acho que você precisa ter cuidado com a ordem em que você o faz (ou seja, feche sua sessão por último).

    
por 13.07.2009 / 20:35
2

Você pode querer verificar as extensões da comunidade Powershell. Inclui os cmdlets Get, Stop e Disconnect TerminalSession.

    
por 13.07.2009 / 22:06
2

Você pode usar o utilitário tsdiscon para desconectar as 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 deles.

Uma construção de loop como essa deve funcionar

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

onde q.bat é

query session /sm | find "Active"

Isso desconectará apenas as sessões remotas e ignorará o usuário do console.

    
por 13.07.2009 / 20:54
1

Você pode desconectar sessões locais ou remotas com o 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.
    
por 20.07.2009 / 03:53
1

Eu descobri que o TSDISCON não remove "Disc" sessões conectadas.

Eu substitui o TSDISCON com o logoff.

    
por 21.06.2010 / 22:12
1

Você pode usar o módulo PowerShell do PSTerminalServices:

link

Get-TSSession -ComputerName server1 -State Active | Desconectar-TSSession -WhatIf

    
por 22.06.2010 / 11:16
1

Eu sei que o OP é bem antigo agora, mas isso deve fazer o que você quer (e caso alguém ainda esteja procurando algo para fazer o mesmo, eu pensei em responder de qualquer maneira).

Da mesma forma, você pode usar query/reset session no lugar de 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
)
    
por 23.12.2011 / 00:51
1

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)

    
por 06.02.2014 / 20:57
0

O comando TSDiscon desconectará as sessões dos serviços de terminal (RDP). Usado por conta própria, irá desassociar a sessão atual, você pode especificar o ID da sessão que deseja desconectar, você também pode fornecer o nome do servidor para desconectar.

Detalhes completos podem ser encontrados aqui .

    
por 13.07.2009 / 20:58
0

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, você pode simplesmente ligar:

shutdown -r -f -m \computer_to_restart

Isso realmente forçará a reinicialização do computador.

    
por 13.07.2009 / 20:34