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

PowerShell导出多显示器信息至Excel异常,如何处理多行输出?

解决多显示器场景下PowerShell导出CSV的格式问题

问题原因

当目标机器连接多台显示器时,$details会变成数组类型,而Export-Csv无法直接序列化数组,导致Excel中对应单元格显示System.Object[]。以下是两种符合你需求的解决方案:


方案1:将多显示器结果合并到同一单元格(带换行)

把数组中的多个值用换行符连接成单个字符串,导出后在Excel中开启单元格自动换行即可正常显示。

修改后的脚本:

Get-Content C:\temp\hostnames.txt | ForEach-Object {
    $computerName = $_
    # 远程获取显示器连接参数,提取VideoOutputTechnology并合并为带换行的字符串
    $details = Invoke-Command -ComputerName $computerName -ScriptBlock {
        Get-WmiObject WmiMonitorConnectionParams -Namespace root\wmi -ErrorAction SilentlyContinue | 
            ForEach-Object { $_.VideoOutputTechnology }
    }

    $displayType = if ($details) {
        # 用Windows换行符`r`n连接数组元素,Excel识别后可换行
        $details -join "`r`n"
    } else {
        'Unavailable'
    }

    # 创建输出对象
    [PSCustomObject]@{
        ComputerName = $computerName
        DisplayType  = $displayType
    }
} | Sort-Object ComputerName | Export-Csv C:\temp\Monitor_Report.csv -NoTypeInformation

后续操作

打开导出的CSV文件后,选中DisplayType列,在Excel中开启自动换行(开始选项卡→对齐方式→自动换行),即可看到每个显示器结果单独换行显示。


方案2:每个显示器结果单独占一行,机器名仅显示一次

将每个显示器信息拆分为单独行,仅第一行显示机器名,后续行留空,适合需要逐行查看单台机器多显示器的场景。

修改后的脚本:

Get-Content C:\temp\hostnames.txt | ForEach-Object {
    $computerName = $_
    $details = Invoke-Command -ComputerName $computerName -ScriptBlock {
        Get-WmiObject WmiMonitorConnectionParams -Namespace root\wmi -ErrorAction SilentlyContinue | 
            ForEach-Object { $_.VideoOutputTechnology }
    }

    if ($details) {
        # 循环每个显示器结果,仅第一个对象保留机器名
        foreach ($index in 0..($details.Count - 1)) {
            [PSCustomObject]@{
                ComputerName = if ($index -eq 0) { $computerName } else { '' }
                DisplayType  = $details[$index]
            }
        }
    } else {
        # 无结果时输出Unavailable
        [PSCustomObject]@{
            ComputerName = $computerName
            DisplayType  = 'Unavailable'
        }
    }
} | Sort-Object ComputerName | Export-Csv C:\temp\Monitor_Report.csv -NoTypeInformation

效果说明

导出后,单台机器的多个显示器结果会依次占行,只有第一行显示机器名,后续同机器的行ComputerName列为空,方便按机器分组查看。


额外优化建议

  1. 推荐使用[PSCustomObject]替代New-Object PsObject,语法更简洁且性能更好。
  2. 可以给VideoOutputTechnology的数值添加友好映射(比如10对应DisplayPort),提升可读性:
    $displayMap = @{
        0 = 'VGA'
        1 = 'S-Video'
        10 = 'DisplayPort'
        # 可补充其他映射值,参考微软官方文档
    }
    # 使用时替换为:$displayMap[$details[$index]] ?? $details[$index]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:17:44