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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:05:17