如何使用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
相关产品推荐
相关产品推荐

