Estoy buscando una manera de cerrar todas las sesiones activas de Escritorio remoto en una computadora (computadora local). Windows incluye un par de comandos (rwinsta, qwinsta, etc.) para ver las sesiones activas, pero no veo cómo podría usar fácilmente la información (a menos que analice la cadena ...) para cerrar todas las sesiones.
¿Hay alguna manera en Powershell (o C #, Batch) para cerrar todas las sesiones de Escritorio remoto en una computadora local?
Gracias martin
Respuestas:
Puede intentar usar el
/sm
parámetro no documentado paraquery session
(en un archivo por lotes) para ordenar las cosas más fácilmente:fuente
Sí, usando tsdiscon desde una línea de comando:
donde el n debe ser reemplazado con el id de sesión.
Puede obtener el número de sesión de
Dado que dice que desea cerrar todas las sesiones en la computadora local, supongo que deberá tener cuidado con el orden en que lo hace (es decir, cierre la sesión al final).
fuente
Es posible que desee consultar Powershell Community Extensions. Incluye los cmdlets Obtener, Detener y Desconectar TerminalSession.
fuente
Puede usar la utilidad tsdiscon para desconectar sesiones. Si utiliza el comando "consultar sesiones" desde un símbolo del sistema, puede ver la lista de ID y luego emitir un comando tsdiscon para cada uno.
Una construcción en bucle como esta debería funcionar
donde q.bat es
Eso solo desconectará las sesiones remotas e ignorará al usuario de la consola.
fuente
Puede desconectar sesiones locales o remotas con tsdiscon.
fuente
Encontré que TSDISCON no elimina las sesiones conectadas a "Disco".
Reemplacé TSDISCON con cierre de sesión.
fuente
Puede usar el 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 Active | Desconectar-TSSession -WhatIf
fuente
Sé que el OP es bastante antiguo ahora, pero esto debería hacer lo que buscas (y en caso de que alguien más esté buscando algo para hacer lo mismo, pensé que respondería de todos modos).
Del mismo modo, podría usar en
query/reset session
lugar deq/rwinsta
...fuente
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)
fuente
El comando TSDiscon desconectará las sesiones de servicios de terminal (RDP). Si se usa solo, se desconectará la sesión actual, puede especificar el ID de la sesión de la sesión que desea desconectar, también puede proporcionar el nombre del servidor para desconectarse.
Los detalles completos se pueden encontrar aquí .
fuente
No especificó si desea hacer esto sin apagar o reiniciar la computadora. Pero si no le importa reiniciar o apagar, simplemente puede llamar:
Esto forzará un reinicio de la computadora.
fuente
Incluso la pregunta es muy antigua, casi no hay soluciones para todas las versiones sin qwinsta / query / tsdiscon, es decir, todas las versiones domésticas de Windows.
Sin embargo, hay una versión fácil de PowerShell para desconectar una sesión:
Se puede obtener una identificación de sesión, por ejemplo, con
getProcesss
. Para desconectar (¡no cerrar sesión!), Use una sesión$tstType::DisconnectSession("localhost", 2)
.fuente