使用query session与logoff的批处理脚本无法从远程服务器注销用户的问题
使用query session与logoff的批处理脚本无法从远程服务器注销用户的问题
各位大佬好,我现在碰到个头疼的问题,想请大家支个招。
最近要给一批Windows服务器做应用自动更新,更新前必须把每台服务器上的所有用户会话(包括活跃、断开、挂起这些状态的)都注销掉,但得排除我自己当前运行脚本的这个用户账号。涉及的服务器列表是:
- NRD01-A
- NRD01-B
- NRD02-A
- NRD02-B
麻烦的是,这些服务器上PowerShell被限制禁用了,只能用批处理脚本搞事情。
我本来的思路是用query session命令远程获取每台服务器的会话列表,再用logoff命令注销对应的会话,但试了好几种写法都没成功:要么是query session的输出格式太乱,提取不到正确的会话ID和用户名;要么就是远程执行logoff时提示权限不足,或者找不到指定会话。
我自己瞎凑了一段脚本,大概是这样的:
@echo off set "currentUser=%USERNAME%" for %%s in (NRD01-A NRD01-B NRD02-A NRD02-B) do ( echo 正在处理服务器:%%s rem 这里尝试获取会话,但输出没法直接用 query session /server:%%s rem 卡壳了:不知道怎么过滤掉自己的用户,也不知道怎么把会话ID传给logoff )
现在想请教下,有没有靠谱的批处理写法,能帮我完成这几个核心需求:
- 稳定远程查询目标服务器的所有用户会话
- 自动排除运行脚本的当前用户(不管这个用户在远程服务器上有没有会话)
- 对剩下的所有会话(不管状态)执行注销操作
- 最好能处理
query session输出的各种格式细节,避免提取会话ID出错
另外补充下:我已经确认自己有目标服务器的管理员权限,手动登录到服务器上执行query session和logoff是完全正常的,但远程用批处理调用就各种出问题,是不是命令参数或者输出解析的逻辑有坑啊?




