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

Windows PowerShell拆分字符串提取会话ID返回空,求解决方法

解决quser输出中提取会话ID的问题

你的问题出在split(' ')只会按单个空格拆分字符串,但quser的输出是用多个连续空格分隔字段的,这会导致拆分后生成大量空字符串元素,所以索引[2]对应的是空值。

以下是几种可行的解决方法:

方法1:正则分割(最简便)

使用-split '\s+'匹配一个或多个空白字符(包括空格、制表符),直接得到非空的字段数组:

$id = ((quser /server:'ServerName' | Where-Object { $_ -match 'User' }) -split '\s+')[2]

方法2:正则捕获(更精准)

直接用正则表达式匹配会话ID的数字部分,通过捕获组提取:

$userLine = quser /server:'ServerName' | Where-Object { $_ -match 'User' }
if ($userLine -match '\s+(\d+)\s+') {
    $id = $matches[1]
}

这种方法不依赖字段的固定位置,即使输出格式略有变化也能正常提取。

方法3:转换为自定义对象(适合多用户场景)

如果需要处理多个用户的会话信息,可以把输出转换为结构化对象,后续提取字段更灵活:

# 跳过quser的表头行,获取用户数据行
$quserLines = quser /server:'ServerName' | Select-Object -Skip 1

# 转换为自定义对象
$sessionInfo = $quserLines | ForEach-Object {
    $fields = $_ -split '\s+'
    [PSCustomObject]@{
        Username   = $fields[0]
        SessionName= $fields[1]
        SessionID  = $fields[2]
        State      = $fields[3]
        IdleTime   = $fields[4]
        LogonTime  = $fields[5..6] -join ' '
    }
}

# 提取目标用户的会话ID
$id = $sessionInfo | Where-Object Username -eq 'User' | Select-Object -ExpandProperty SessionID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:00:20