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

如何使用PowerShell获取多条Annotation并导出至CSV文件

方案1:单独获取各注解值后构造统一输出对象

你可以在循环内针对单台VM分别拉取每个需要的注解值,再合并到同一个自定义对象输出,就可以实现单行展示多值,不需要在Get-Annotation的-Name参数后一次性传入多个名称。
示例代码如下,以同时导出「应用负责人」「应用名称」「所属业务线」三个注解值为例:

$AW = foreach ($vmsowner in $VMsOwners)
{
    $VMlisted = $vmsowner.objectname
    $vmObj = Get-VM $VMlisted
    # 单独获取每个注解的值,不用同时传多个Name参数
    $appOwner = $vmObj | Get-Annotation -Name "Application Owner" | Select-Object -ExpandProperty Value
    $appName = $vmObj | Get-Annotation -Name "Application Name" | Select-Object -ExpandProperty Value
    $businessUnit = $vmObj | Get-Annotation -Name "Business Unit" | Select-Object -ExpandProperty Value
    # 构造统一对象输出,所有字段在同一行
    [PSCustomObject]@{
        VM = $vmObj.Name
        "Application Owner" = $appOwner
        "Application Name" = $appName
        "Business Unit" = $businessUnit
    }
}
$AW | ConvertTo-Csv -NoTypeInformation | Out-File -FilePath $FilenameOwners

方案2:先拉取全部注解再筛选取值(减少接口调用次数)

如果需要拉取的注解数量较多,可以先一次性拉取当前VM的所有注解,再从结果中筛选需要的字段,也不需要在Get-Annotation参数中指定多个名称:

$AW = foreach ($vmsowner in $VMsOwners)
{
    $VMlisted = $vmsowner.objectname
    $vmObj = Get-VM $VMlisted
    # 拉取当前VM所有注解,不指定Name参数
    $allAnnotations = $vmObj | Get-Annotation
    # 从全量注解中筛选需要的取值
    [PSCustomObject]@{
        VM = $vmObj.Name
        "Application Owner" = ($allAnnotations | Where-Object {$_.Name -eq "Application Owner"}).Value
        "Application Name" = ($allAnnotations | Where-Object {$_.Name -eq "Application Name"}).Value
        "Business Unit" = ($allAnnotations | Where-Object {$_.Name -eq "Business Unit"}).Value
    }
}
$AW | ConvertTo-Csv -NoTypeInformation | Out-File -FilePath $FilenameOwners

两种方案导出的CSV都是每行对应一台VM,包含所有你指定的注解字段,不会拆分多行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:36:11