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

PowerShell写入CSV单元格多行值异常,显示System.Object[]求助

PowerShell CSV写入网卡信息问题排查与修正

问题根源

  1. 网卡名称处理逻辑错误
    你用select @{Name='Name';Expression={[string]::join(";", ($_.Name))}}处理网卡时,是对每个网卡对象单独执行join操作。由于$_.Name本身是单个网卡的名称,join单个元素的结果还是原字符串,最终$vmnetwork依然是包含多个对象的数组,而非预期的单个拼接字符串。

  2. 数组直接赋值导致类型显示异常
    把数组对象$vmnetwork直接赋值给$details的Network属性后,PowerShell在转换CSV时无法将数组自动转为可读文本,只能输出数组的类型名System.Object[]。

  3. 多余的CSV转换步骤
    你通过Get-Member拆分属性再转CSV的操作完全没必要,自定义对象可以直接转为标准CSV结构,该步骤反而增加了出错概率。

修正后的代码

# 提取所有网卡名称,用分号拼接为单个字符串
$vmnetwork = (Get-NetworkAdapter $getvm).Name -join ";"

# 构造自定义对象,Network字段直接使用拼接后的字符串
$details = [pscustomobject]@{            
    ServerName       = $servername;              
    'OS Version'     = $osversion;                 
    DataCenter       = $vmdatacenter;
    Cluster          = $Cluster;
    vCPU             = $vCPU;
    RAM              = $RAM;
    Network          = $vmnetwork
} 

# 直接将对象转为CSV并保存
$details | ConvertTo-Csv -NoTypeInformation | Set-Content -Path "C:\check_$servername.csv"

关键说明

  • (Get-NetworkAdapter $getvm).Name会直接提取所有网卡的名称属性,返回一个字符串数组,再用-join ";"将数组拼接为单个分号分隔的字符串,这样$vmnetwork就是符合预期的文本值。
  • 移除了多余的Get-Member处理步骤,直接利用ConvertTo-Csv将自定义对象转为标准CSV,确保每个字段的值正确显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:25:09