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

PowerShell脚本优化:拆分显示器信息到动态Excel列并去重

显示器资产盘点脚本优化方案

问题梳理

  • 显示器型号、序列号存在重复输出
  • 无法生成动态列(如Screen1、Screen2、MSerial1、MSerial2),当前所有显示器信息合并在同一列

优化思路

  1. 去重处理:对解码后的显示器型号和序列号用Select-Object -Unique去重
  2. 动态列生成:遍历去重后的显示器列表,为每台显示器创建对应的ScreenN和MSerialN属性
  3. 统一属性集:收集所有可能出现的动态列名,确保导出Excel时所有列完整显示

优化后的完整代码

Import-Module ImportExcel

$computersFile = "C:\Temp\Lists\MonitorInfoList.txt"
$outputFile = "C:\Temp\Outputs\Results.xlsx"
$computerInfo = @()
$allProperties = @("Workstation ID") # 初始化基础属性

$computers = Get-Content $computersFile

foreach ($computer in $computers) {
    try {
        $info = [ordered]@{
            "Workstation ID" = $computer
        }

        # 获取显示器信息并处理
        $monitorInfo = Get-WmiObject -Class WmiMonitorID -Namespace "root\wmi" -ComputerName $computer -ErrorAction SilentlyContinue
        if ($monitorInfo) {
            # 解码型号和序列号并去重
            $monitors = $monitorInfo | ForEach-Object {
                [PSCustomObject]@{
                    Model = [System.Text.Encoding]::ASCII.GetString($_.UserFriendlyName -ne 0).Trim()
                    Serial = [System.Text.Encoding]::ASCII.GetString($_.SerialNumberID -ne 0).Trim()
                }
            } | Select-Object Model, Serial -Unique

            # 生成动态列
            for ($i = 0; $i -lt $monitors.Count; $i++) {
                $screenCol = "Screen$($i+1)"
                $serialCol = "MSerial$($i+1)"
                $info[$screenCol] = $monitors[$i].Model
                $info[$serialCol] = $monitors[$i].Serial

                # 记录所有出现过的属性列
                if ($allProperties -notcontains $screenCol) { $allProperties += $screenCol }
                if ($allProperties -notcontains $serialCol) { $allProperties += $serialCol }
            }
        }

        $computerInfo += New-Object PSObject -Property $info
    } catch {
        Write-Warning "获取计算机 $computer 信息失败: $($_.Exception.Message)"
    }
}

# 统一所有对象的属性,确保列完整
$computerInfo = $computerInfo | Select-Object $allProperties | Sort-Object "Workstation ID"

# 导出到Excel
$computerInfo | Export-Excel -Path $outputFile -AutoSize -TableStyle Light16

效果对比

当前输出

Workstation IDScreenMSerial
Computer1BenQ BL2283, MDCC-6230, MDCC-6230Serial1, Serial2, Serial2
Computer2AS224WMiSerial1

优化后输出

Workstation IDScreen1Screen2MSerial1MSerial2
Computer1BenQ BL2283MDCC-6230Serial1Serial2
Computer2AS224WMiSerial1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:51:01