PowerShell脚本优化:拆分显示器信息到动态Excel列并去重
显示器资产盘点脚本优化方案
问题梳理
- 显示器型号、序列号存在重复输出
- 无法生成动态列(如
Screen1、Screen2、MSerial1、MSerial2),当前所有显示器信息合并在同一列
优化思路
- 去重处理:对解码后的显示器型号和序列号用
Select-Object -Unique去重 - 动态列生成:遍历去重后的显示器列表,为每台显示器创建对应的
ScreenN和MSerialN属性 - 统一属性集:收集所有可能出现的动态列名,确保导出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 ID | Screen | MSerial |
|---|---|---|
| Computer1 | BenQ BL2283, MDCC-6230, MDCC-6230 | Serial1, Serial2, Serial2 |
| Computer2 | AS224WMi | Serial1 |
优化后输出
| Workstation ID | Screen1 | Screen2 | MSerial1 | MSerial2 |
|---|---|---|---|---|
| Computer1 | BenQ BL2283 | MDCC-6230 | Serial1 | Serial2 |
| Computer2 | AS224WMi | Serial1 |
内容的提问来源于stack exchange,提问作者kbaz
相关产品推荐
相关产品推荐

