PowerShell写入CSV单元格多行值异常,显示System.Object[]求助
PowerShell CSV写入网卡信息问题排查与修正
问题根源
网卡名称处理逻辑错误
你用select @{Name='Name';Expression={[string]::join(";", ($_.Name))}}处理网卡时,是对每个网卡对象单独执行join操作。由于$_.Name本身是单个网卡的名称,join单个元素的结果还是原字符串,最终$vmnetwork依然是包含多个对象的数组,而非预期的单个拼接字符串。数组直接赋值导致类型显示异常
把数组对象$vmnetwork直接赋值给$details的Network属性后,PowerShell在转换CSV时无法将数组自动转为可读文本,只能输出数组的类型名System.Object[]。多余的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
相关产品推荐
相关产品推荐

