Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En algunas condiciones, es posible que un administrador quiera forzar un inicio de sesión de todos los usuarios que han iniciado sesión actualmente en un servidor de Escritorio remoto. Puede hacerlo mediante un archivo por lotes o un script de PowerShell.
Advertencia
Al realizar el procedimiento siguiente, se cierra la sesión de todos los usuarios que han iniciado sesión actualmente en el servidor de Escritorio remoto. Esto puede dar lugar a una pérdida de datos no guardados. Debido a esto, se recomienda extrema precaución.
Número de KB original: 259436
Mediante PowerShell
Para cerrar sesión en todas las sesiones de usuario, ejecute los siguientes cmdlets de PowerShell en connection Broker:
$sessions = Get-RDUserSession
foreach($session in $sessions)
{
Invoke-RDUserLogoff -HostServer $session.HostServer -UnifiedSessionID $session.UnifiedSessionId -Force
}
Para cerrar sesión solo las sesiones de usuario desconectadas, ejecute los siguientes cmdlets de PowerShell en connection Broker:
$sessions = Get-RDUserSession | ? {$_.SessionState -eq "STATE_DISCONNECTED"}
foreach($session in $sessions)
{
Invoke-RDUserLogoff -HostServer $session.HostServer -UnifiedSessionID $session.UnifiedSessionId -Force
}
Uso del archivo por lotes
Coloque la siguiente información en un archivo por lotes (.bat):
query session >session.txt
for /f "skip=1 tokens=3," %%i in (session.txt) DO logoff %%i
del session.txt
Este archivo por lotes se puede ejecutar en cualquier momento que el administrador desee forzar el cierre de sesión de todos los usuarios que no han iniciado sesión en la consola del servidor de Escritorio remoto.
La consulta es un comando de varios propósitos que se encuentra en el entorno del servidor de Escritorio remoto. En este caso, la sesión de consulta crea una lista de todas las sesiones que se ejecutan en el servidor de Escritorio remoto, completa con números de identificador de sesión. Dentro del archivo por lotes, esta salida se redirige a un archivo de texto. A continuación, la instrucción FOR analiza cada línea del archivo de texto, omite la primera línea y busca el número de identificador de sesión que se encuentra en la tercera columna. A continuación, coloca esta variable en Logoff, lo que da lugar a que la sesión se cierre.
No es raro recibir un mensaje de error al ejecutar este archivo por lotes. Si un usuario ha iniciado sesión en la consola del servidor de Escritorio remoto, se genera el siguiente mensaje de error:
Could not logoff session ID 0 from session Console, Error code 5
Error [5]: Access is denied.
Se debe a una limitación del Logoff
comando. No puede forzar el inicio de sesión de la sesión de consola. Una solución alternativa a este problema sería modificar el archivo por lotes para leer:
query session >session.txt
for /f "skip=2 tokens=3," %%i in (session.txt) DO logoff %%i
del session.txt
Hace que se omitan las dos primeras líneas del archivo Session.txt, evitando el error.