修改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
相关产品推荐
相关产品推荐

