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

PowerShell脚本统计Windows服务器断开会话数始终为0的问题排查

排查PowerShell统计Windows服务器断开会话数的问题

核心问题排查方向

  • 未跳过表头行:query user输出的第一行是标题行(如USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME),若遍历未跳过该行,会导致字段拆分逻辑失效,无法正确识别状态。
  • 字段拆分方式错误:输出字段用可变长度空格分隔,直接按固定位置截取或简单拆分会导致字段错位,需用正则匹配任意数量空格来拆分。
  • 状态值匹配偏差:部分系统中断开状态可能显示为全称Disconnected而非缩写Disc,需同时兼容两种情况。

修正后的脚本示例

# 替换为目标服务器名
$SERVER = "YourServerName"
$disconnectedCount = 0

# 执行查询并跳过第一行表头
$sessionResults = query user /server:$SERVER | Select-Object -Skip 1

foreach ($sessionLine in $sessionResults) {
    # 用正则拆分可变空格的字段,过滤空值
    $sessionFields = $sessionLine -split '\s+' | Where-Object { $_ }
    # 状态字段为第4个元素(索引从0开始),可根据实际输出调整
    $currentState = $sessionFields[3]
    
    # 匹配断开状态的两种可能值
    if ($currentState -in 'Disc', 'Disconnected') {
        $disconnectedCount++
    }
}

Write-Host "断开会话总数:$disconnectedCount"

验证调试步骤

  1. 单独运行query user /server:$SERVER,复制输出内容,确认每个会话行的状态字段位置,确保脚本中索引正确。
  2. 在循环内添加Write-Host "原始行:$sessionLine"和Write-Host "拆分后字段:$($sessionFields -join ' | ')",查看字段拆分是否正确。
  3. 检查执行权限:确保运行脚本的账号拥有目标服务器的会话查询权限,否则可能返回不完整结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:10:04