如何使用vCenter PowerShell向导出CSV新增首列location字段
原脚本核心问题
- 每次循环给tempoutput.csv所有行统一添加当前站点的location,会导致上一个站点的所有记录的location被覆盖为当前站点值
- 每次循环导出final.csv时没有加
-Append参数,会直接覆盖之前的所有输出,最终只会保留最后一个站点的数据 - 多余的临时文件读写步骤,既影响效率也容易出错
修正后脚本
# 先删除旧的输出文件,避免旧数据干扰 if (Test-Path final.csv) { Remove-Item final.csv -Force } $inventory = Import-Csv -Path path.csv foreach ($i in $inventory) { # 连接对应vCenter Connect-VIServer -Server $i.vcenter -User $i.username -Password $i.password # 查询主机时直接注入location字段,且放在首列,符合输出要求 Get-VMHost | Select-Object -Property @{Name='location'; Expression={$i.location}}, Name, Version | Export-Csv -Path final.csv -NoTypeInformation -Append # 断开连接 Disconnect-VIServer -Server $i.vcenter -Force -Confirm:$false }
调整说明
- 通过计算属性直接在查询主机时就添加对应站点的location字段,天然保证每一行的location和所属站点匹配,不会出现覆盖错误
- 导出时添加
-Append参数,每个站点的主机数据会依次追加到最终输出文件,不会覆盖之前的结果 - 输出列顺序天然是
location > name > version,完全匹配需求的CSV格式 - 去掉了冗余的临时文件读写逻辑,执行效率更高
内容的提问来源于stack exchange,提问作者Dishant Dhokia
相关产品推荐
相关产品推荐

