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

Powershell如何将两条VMware属性查询结果合并为两列导出CSV

PowerShell合并VMware查询结果导出CSV方案

核心说明

不要使用Format-Table实现该需求,Format-Table输出的是控制台格式化对象,不保留原始属性值,无法正常导出为CSV。推荐直接遍历VM构造自定义对象实现属性合并,完全避免数据错行问题。

最优实现方案(单次遍历无错位)

只查询一次VM列表,每个VM同时获取需要的三类属性,天然对齐无错配,性能最优:

Get-VM | ForEach-Object {
    # 读取当前VM的自定义属性值
    $updateGroup = $_ | Get-Annotation -CustomAttribute "GrupaAktualizacji" | Select-Object -ExpandProperty Value
    # 构造合并后的属性对象
    [PSCustomObject]@{
        Name = $_.Name
        DnsName = $_.ExtensionData.Guest.Hostname
        GrupaAktualizacji = $updateGroup
    }
} | Export-Csv -Path "./VM属性汇总.csv" -Encoding UTF8 -NoTypeInformation

如果需要自定义列名,直接修改上方PSCustomObject里的键名即可。

备选方案(两次查询按索引合并,仅推荐测试场景使用)

如果必须分开执行两次查询再合并,可以用数组索引对齐实现,但是要保证两次查询期间VM列表没有新增、删除、改名操作,否则会出现数据错位:

# 分别获取两次查询的结果数组
$vmBaseInfo = Get-VM | Select-Object Name, @{N="DnsName"; E={$_.ExtensionData.Guest.Hostname}}
$attrValues = Get-VM | Get-Annotation -CustomAttribute "GrupaAktualizacji" | Select-Object -ExpandProperty Value

# 按索引合并两个数组的属性
$mergedData = for ($index = 0; $index -lt $vmBaseInfo.Count; $index++) {
    $vmBaseInfo[$index] | Add-Member -MemberType NoteProperty -Name "GrupaAktualizacji" -Value $attrValues[$index] -PassThru
}

# 导出CSV文件
$mergedData | Export-Csv -Path "./VM属性汇总.csv" -Encoding UTF8 -NoTypeInformation

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:30:00