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

修改PowerShell脚本:导出RD服务器活跃用户时添加主机名列至CSV

修复后的RD服务器活跃用户统计脚本(带服务器名列+可Excel打开的CSV)

原脚本直接导出quser的纯文本输出会导致CSV格式混乱,且缺少服务器名列。以下是修正后的完整脚本,解决了这些问题:

# 读取服务器列表文件
$serverList = Get-Content D:\Hosss.txt

# 初始化空数组存储所有结果
$allResults = @()

foreach ($hosts in $serverList) {
    try {
        # 执行quser命令,捕获输出(包含错误信息)
        $quserOutput = quser /server:$hosts 2>&1
        
        # 检查是否存在活跃用户(排除无用户的提示)
        if ($quserOutput -notmatch "No User exists") {
            # 跳过表头行,处理数据行
            $dataRows = $quserOutput | Select-Object -Skip 1
            
            foreach ($row in $dataRows) {
                # 按多个空格分割行内容,过滤空元素
                $rowData = $row.Trim() -split '\s+' | Where-Object { $_ }
                
                # 兼容两种会话格式(有无SESSIONNAME)
                if ($rowData.Count -eq 6) {
                    $sessionName = $null
                    $userName, $id, $state, $idleTime, $logonDate, $logonTime = $rowData
                } else {
                    $userName, $sessionName, $id, $state, $idleTime, $logonDate, $logonTime = $rowData
                }
                
                # 创建带服务器名的自定义对象
                $resultObj = [PSCustomObject]@{
                    HostName     = $hosts
                    UserName     = $userName
                    SessionName  = $sessionName
                    SessionID    = $id
                    State        = $state
                    IdleTime     = $idleTime
                    LogonTime    = "$logonDate $logonTime"
                }
                
                $allResults += $resultObj
            }
        } else {
            # 记录无活跃用户的服务器
            $allResults += [PSCustomObject]@{
                HostName     = $hosts
                UserName     = "无活跃用户"
                SessionName  = $null
                SessionID    = $null
                State        = $null
                IdleTime     = $null
                LogonTime    = $null
            }
        }
    } catch {
        # 记录连接失败的服务器
        $allResults += [PSCustomObject]@{
            HostName     = $hosts
            UserName     = "连接失败"
            SessionName  = $null
            SessionID    = $null
            State        = $null
            IdleTime     = $null
            LogonTime    = $null
        }
    }
}

# 导出为UTF-8带BOM的CSV,确保Excel能正常打开且无乱码
$allResults | Export-Csv -Path D:\active.csv -Encoding UTF8 -NoTypeInformation

关键说明

  • 格式解析:把quser的纯文本输出转换成PowerShell对象,保证CSV列对应正确
  • 服务器名列:每个结果对象都携带当前服务器名,作为CSV首列
  • 异常处理:兼容服务器不可达、无活跃用户的场景,避免脚本中断
  • Excel兼容:用UTF-8带BOM编码导出,解决Excel打开CSV时的乱码问题

使用时只需确保D:\Hosss.txt中每行是一个服务器名/IP,运行脚本后直接打开D:\active.csv即可查看结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:43:19