I am looking for a way to close all active Remote Desktop sessions on a computer (local computer). Windows includes a couple of commands (rwinsta, qwinsta, etc.) to look at the active sessions, but I don't see how I could easily use the information (unless I parse the string...) to close all the sessions.

Is there a way in Powershell (or C#, Batch) to close all Remote Desktop sessions on a local computer?

Thanks

link|improve this question
I updated my answer to include a loop that will only disconnect active remote sessions, not the console – Kevin Kuphal Jul 14 '09 at 20:10
feedback

migrated from stackoverflow.com Jul 16 '09 at 10:05

This question came from our site for professional and enthusiast programmers.

10 Answers

up vote 3 down vote accepted

You could try using the undocumented /sm parameter for query session (in a batch file) to sort things more easily:

FOR /f %%G IN ('query session /sm') DO tsdiscon %%G
link|improve this answer
That's a good beginning... but I want to disconnect only Remote Desktop sessions. – Martin Jul 14 '09 at 5:04
feedback

You may want to check out Powershell Community Extensions. It includes Get, Stop and Disconnect TerminalSession cmdlets.

link|improve this answer
feedback

You can use the tsdiscon utility to disconnect sessions. If you use the "query sessions" command from a command-prompt, you can see the list of IDs and then issue a tsdiscon command for each one.

A looping construct like this should work

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

where q.bat is

query session /sm | find "Active"

That will only disconnect remote sessions and ignore the console user.

link|improve this answer
feedback

Yes, using tsdiscon from a command line:

tsdiscon n

where the n should be replaced with the session id.

You can get the session number from

query session

Since you say you want to close all sessions on the local computer, I guess you will need to be careful about the order in which you do it (ie close your session last).

link|improve this answer
feedback

You can disconnect local or remote sessions with 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.
link|improve this answer
feedback

I found TSDISCON does not remove "Disc"onnected sessions.

I replaced TSDISCON with logoff.

link|improve this answer
feedback

You can use the PSTerminalServices PowerShell module:

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

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

link|improve this answer
feedback

The TSDiscon command will disconnect terminal services (RDP) sessions. Used on its own will disconect the current session, you can specify the session ID of the session you want to disconnect, you can also supply the server name to disconnect from.

Full details can be found here.

link|improve this answer
feedback

You didn't specify if you want to do this with out shutting down or restarting the computer. But if you don't mind a restart or shutdown you can just call:

shutdown -r -f -m \\computer_to_restart

This will actually force a restart of the computer.

link|improve this answer
Well... that's an idea. But I don't want to kill all the sessions. Only the remote desktop sessions. – Martin Jul 13 '09 at 18:43
feedback

I know the OP is quite old now, but this should do what you're after (and incase anyone else is still looking for something to do the same, I thought I would reply anyway).

Similarly you could use query/reset session inplace of 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
)
link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.