PowerShell脚本导出CSV异常:Hostname列显示System.Object[]
问题解决:PowerShell导出CSV时Hostname列显示System.Object[]
问题描述
终端可正常显示所有数据,但导出至CSV文件时,Hostname列填充为System.Object[],此前添加更多列时也出现过类似问题。
问题原因
脚本的foreach循环存在变量引用错误:
- 循环变量为
$hostsname(用于遍历单台主机),但后续获取数据中心、主机名、型号时,错误使用了$hosts(整个VMHost数组),导致这些变量存储的是数组而非单台主机的对应值,导出CSV时就会显示System.Object[]。
修正后的脚本
# 获取主机信息 $hosts = Get-VMHost # 初始化空数组存储数据 $serviceTags = @() # 遍历每台主机 foreach ($vmHost in $hosts) { # 获取数据中心、主机名及型号 $mydatacenter = Get-Datacenter -VMHost $vmHost Write-Host "Completed Datacenter..." $vhostName = $vmHost.Name Write-Host "Completed Hosts..." $model = $vmHost.ExtensionData.Summary.Hardware.Model Write-Host "Completed Model..." $serviceTag = ($vmHost | Get-View).Hardware.SystemInfo.OtherIdentifyingInfo | Where-Object { $_.IdentifierType.Key -eq "ServiceTag" } | Select-Object -ExpandProperty IdentifierValue Write-Host "Completed ServiceTag" # 创建包含数据中心、主机名、型号和服务标签的自定义对象 $serviceTagInfo = [PSCustomObject]@{ DataCenter = $mydatacenter.Name # 直接取数据中心名称,避免导出时显示对象类型 HostName = $vhostName Model = $model ServiceTag = $serviceTag } # 将对象添加至数组 $serviceTags += $serviceTagInfo } # 导出数据至CSV $serviceTags | Export-Csv -Path "c:\Users\myuser\Documents\ServiceTags2.csv" -NoTypeInformation
关键修正点
- 将循环内的
$hosts替换为循环变量$vmHost(重命名变量提升可读性),确保每次仅处理单台主机。 - 数据中心字段直接取
$mydatacenter.Name,避免导出时显示数据中心对象类型,而是输出实际名称。
内容的提问来源于stack exchange,提问作者work.acct0929
相关产品推荐
相关产品推荐

