Windows Server 2019终端服务器批量注销脚本添加用户例外求助
解决方案
我们可以通过定义例外用户列表,在原有注销逻辑中增加判断:仅当用户不在例外列表内且会话处于断开状态时,才执行注销操作。
修改后的脚本如下:
@echo off REM 注销断开状态的Citrix用户(排除指定例外用户) SET SESSION_PFAD=C:\Windows\Temp\Session.txt REM 定义例外用户列表,用空格分隔多个用户 SET EXCEPT_USERS="User1 User2 User3 User4 User5" query session > %SESSION_PFAD% for /f "eol=> skip=2 tokens=1,2,3,4" %%i in (%SESSION_PFAD%) DO ( REM 检查会话状态是否为断开(Getr.) if "%%k" == "Getr." ( REM 检查当前用户是否不在例外列表中 echo !EXCEPT_USERS! | findstr /i /c:"%%l" >nul if errorlevel 1 ( REM 用户不在例外列表,执行注销 logoff %%j ) ) ) :END del %SESSION_PFAD%
关键改动说明:
- 新增
SET EXCEPT_USERS="User1 User2 User3 User4 User5":将需要排除的5个用户名用空格分隔,替换成实际业务中的目标用户名即可。 - 调整
for /f的tokens参数为1,2,3,4:query session输出里用户名通常在第4列(对应变量%%l),确保能正确捕获用户名。 - 增加
findstr判断逻辑:通过findstr检查当前用户名是否在例外列表中,errorlevel 1表示未匹配到(即用户不在例外名单),此时才执行注销。 - 加入
/i参数让findstr不区分大小写,避免因用户名大小写不一致导致判断失效。
注意事项:
- 务必将
User1到User5替换为实际需要排除的用户名,保证拼写完全准确。 - 若
query session的输出列顺序有变化,可先手动运行query session命令查看实际输出,调整tokens对应的变量位置。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

