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

PowerShell遍历主机名获IP后,执行非活跃用户注销操作报错

嘿,这问题我熟!咱们一步步来排查解决:

最可能的原因:ArrayList里存的不是纯字符串IP

你直接传IP能正常运行,但用ArrayList里的元素就报错,大概率是你往ArrayList里存的不是单纯的IP字符串,而是IPAddress对象或者数组类型。PowerShell隐式转换时会出问题,导致传给注销脚本的参数格式不对。

举个反例:如果你的IP获取代码是这样的,就会存进数组对象:

$ip = [System.Net.Dns]::GetHostAddresses($hostname)
$ipList.Add($ip)

这里GetHostAddresses返回的是IPAddress[]数组,直接存到ArrayList后,每个元素都是数组,不是单个IP字符串,调用时自然报错。

修正方法:确保存入ArrayList的是纯字符串IP

修改IP获取逻辑,提取出字符串格式的IPv4地址(避免IPv6带来的兼容问题):

$ipList = New-Object System.Collections.ArrayList
foreach ($hostname in $hostnames) {
    # 只取第一个有效的IPv4地址
    $ipString = [System.Net.Dns]::GetHostAddresses($hostname) | 
                Where-Object { $_.AddressFamily -eq 'InterNetwork' } |
                Select-Object -ExpandProperty IPAddressToString -First 1
    
    if ($ipString) { # 过滤掉解析失败的主机
        [void]$ipList.Add($ipString)
    }
}

第二个可能:遍历ArrayList时没处理无效元素

如果主机名列表里有解析失败的条目,ArrayList里可能会混入$null或者空字符串,遍历的时候传到注销脚本里就会触发错误。

修正方法:遍历前先过滤无效IP

foreach ($targetIp in $ipList) {
    # 跳过空值或无效IP
    if ([string]::IsNullOrWhiteSpace($targetIp)) {
        Write-Warning "跳过无效IP:$targetIp"
        continue
    }

    # 这里放你借鉴的注销非活跃用户的代码,用$targetIp作为目标IP
    $sessionData = quser /server:$targetIp 2>&1
    if ($LASTEXITCODE -ne 0) {
        Write-Error "无法连接到 $targetIp :$sessionData"
        continue
    }

    # 处理会话数据,注销非活跃用户
    $sessionData | Select-Object -Skip 1 | ForEach-Object {
        $fields = $_ -split '\s+' | Where-Object { $_ }
        $username = $fields[0]
        $sessionId = $fields[2]
        $idleTime = $fields[-2]

        # 自定义非活跃判断逻辑(比如闲置超过30分钟)
        if ($idleTime -match '^\d+$' -and [int]$idleTime -ge 30 -or $idleTime -like '*+*') {
            logoff $sessionId /server:$targetIp
            Write-Host "已注销 $targetIp 上的用户 $username(会话ID:$sessionId)"
        }
    }
}

额外排查点:权限与网络上下文

如果上面的方法都没用,要确认遍历ArrayList时的执行上下文和你直接传IP时是否一致:

  • 是不是用了不同的用户权限?
  • 有没有网络延迟导致批量遍历的时候部分IP连接超时?可以加个Start-Sleep -Seconds 1在循环里缓解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:13:51