You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Batch脚本用Query User判断Windows服务器用户登录状态出错求助

解决Batch脚本误判断开连接用户为登录状态的问题

你的问题出在只检查了目标用户是否存在于query user的输出中,却没有过滤用户的连接状态。query user会列出所有曾经登录过(包括已断开)的用户,断开状态的用户会显示Disc(英文系统)或断开(中文系统),而真正处于活动登录的用户状态是Active(英文)或活动(中文)。如果脚本只匹配用户名,自然会把断开的用户误判为登录状态。

典型错误脚本(模拟你的写法)

@echo off
set "targetUser=TestUser"
query user | findstr /i "%targetUser%"
if %errorlevel% equ 0 (
    echo 用户已登录
) else (
    echo 用户未登录
)

这个脚本只要用户出现在列表里就判定登录,完全忽略了状态字段。

修正后的脚本

根据你的系统语言选择对应的版本:

英文系统版本

@echo off
set "targetUser=TestUser"
:: 先定位目标用户行,再过滤出状态为Active的记录
query user | findstr /i "%targetUser%" | findstr /i "Active"
if %errorlevel% equ 0 (
    echo %targetUser% 处于活动登录状态
) else (
    echo %targetUser% 未登录或已断开连接
)

中文系统版本

@echo off
set "targetUser=测试用户"
:: 先定位目标用户行,再过滤出状态为活动的记录
query user | findstr /i "%targetUser%" | findstr /i "活动"
if %errorlevel% equ 0 (
    echo %targetUser% 处于活动登录状态
) else (
    echo %targetUser% 未登录或已断开连接
)

原理说明

query user的典型输出(英文系统)示例:

USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
>administrator         console             1  Active      none   2024/5/20 10:00
 testuser                                    2  Disc         1+00:00   2024/5/19 16:30

可以看到,活动用户的STATE列是Active,断开用户是Disc。修正后的脚本通过两次findstr:

  1. 第一次找到包含目标用户名的行
  2. 第二次只保留状态为活动的行
    只有两次匹配都成功(errorlevel为0),才判定用户处于有效登录状态。

内容的提问来源于stack exchange,提问作者Jon Zavialov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:01:19