Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

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

share|improve this question

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

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

    
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

11 Answers 11

up vote 4 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
share|improve this answer
    
That's a good beginning... but I want to disconnect only Remote Desktop sessions. –  Martin Jul 14 '09 at 5:04

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).

share|improve this answer

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

share|improve this answer

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.

share|improve this answer

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.
share|improve this answer

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

I replaced TSDISCON with logoff.

share|improve this answer

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

share|improve this answer

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
)
share|improve this answer

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)

share|improve this answer

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.

share|improve this answer

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.

share|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

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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