You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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 sessionlogoff是完全正常的,但远程用批处理调用就各种出问题,是不是命令参数或者输出解析的逻辑有坑啊?

火山引擎 最新活动