注销除控制台之外的会话

注销除控制台之外的会话

在多用户环境中,有一个应用程序只能在工作站上的一个会话中打开。用户频繁地从一台 PC 移动到另一台 PC,导致应用程序处于打开状态,而工作站处于锁定状态。禁用用户切换是生产力的决定因素。我需要系统强制注销 Consul 会话之外的任何用户。会话 ID 是一个无法预测的变量。这是我目前得到的结果...

@ echo off

query session > c:\users\session.txt

powershell -Command "Get-Content c:\users\session.txt | Where-Object {$_ -notmatch 'console'} | Set-Content c:\users\session2.txt"

for /f "skip=2 tokens=2," %i in (c:\users\session2.txt) DO C:\Windows\System32\logoff.exe %i

目标是将其放入 .bat 中,在用户登录时运行,这样实际使用计算机的任何人都可以使用该应用程序。非活动会话的数据丢失不必担心。理想情况下,rdp-tcp 和服务也会保持活动会话。

答案1

嗯,这不完全是你想要的,但很接近:一种让用户在被归类为空闲时自动注销的方法:

https://4sysops.com/archives/automatically-log-off-idle-users-in-windows/

答案2

更简单的方法是直接终止所有未在活动会话中运行的应用程序实例。

看起来你已经从 PowerShell 获取会话信息有了一个很好的开始......你也可以使用奎斯塔命令获取所有会话 ID。从那里,解析列表以仅获取标记为“活跃”的会话 ID

从那里,您可以使用任务终止命令带有一个过滤器,排除活动会话 ID,但在其他所有地方终止进程:

taskkill /f /fi “SESSION ne 1” /im apptokill.exe

其中上面的 1 是活动会话的会话 ID。上面的命令将终止未在会话 ID 1 中运行的所有 apptokill.exe 实例。

相关内容