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

PowerShell中-Match参数未按预期工作,$env:USERNAME被忽略

修复方案

错误点说明

  • 使用了中文全角引号“、”、‘、’,PowerShell 仅识别半角引号'、",直接导致匹配逻辑失效。
  • 用单引号包裹$env:USERNAME,PowerShell 单引号字符串不会解析内部变量,当前写法的逻辑等价于判断固定字符串是否非空,永远返回$true,完全没有实现匹配当前用户名的效果。
  • 未将$env:USERNAME和当前行的用户名做关联匹配,单独写变量不会触发对比逻辑。
  • quser输出字段索引取值错误,原代码取的字段位置错位,会导致拿到错误的会话ID,logoff执行失败。

修正后代码

$computers = 'computer1','computer2','computer3','computer4'
$targetUser = $env:USERNAME

foreach ($computer in $computers){
    # 过滤断开状态且属于当前用户的会话,2>$null用于屏蔽无会话时的报错
    quser /server:$computer 2>$null | Where-Object { 
        $_ -match "Disc" -and $_ -match $targetUser
    } | ForEach-Object {
        $splitInfo = $_ -split '\s+'
        $sessionId = $splitInfo[2]
        logoff /SERVER:$computer $sessionId
    }
}

优化提示

如果需要避免模糊匹配出错,可以将匹配逻辑替换为严格的字段相等判断:

quser /server:$computer 2>$null | ForEach-Object {
    $splitInfo = $_ -split '\s+'
    if ($splitInfo[3] -eq 'Disc' -and $splitInfo[0] -eq $targetUser) {
        logoff /SERVER:$computer $splitInfo[2]
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:45:06