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

如何通过Azure Devops Pipeline导出Azure门户含Windows SKU的VM详细信息

Azure DevOps 导出Azure Windows VM详情流水线实现方案

前置准备

  • 在Azure AD中创建服务主体(SPN),为该SPN分配所有需拉取VM信息的订阅的读取者权限,记录SPN的客户端ID、客户端密钥、租户ID备用
  • 进入对应Azure DevOps项目的「项目设置」-「服务连接」,新建Azure Resource Manager类型的服务连接,选择手动输入服务主体信息,填入上述SPN参数、目标租户信息,验证通过后保存服务连接,记录该连接的名称

流水线实现逻辑

采用YAML流水线实现,核心通过Azure CLI拉取指定订阅下的Windows VM信息,筛选要求的字段后导出为CSV文件,最终作为流水线产物提供下载。

完整YAML配置示例

trigger: none # 按需配置触发规则,如需自动触发可修改为分支触发或定时触发规则

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzureCLI@2
  displayName: '拉取Windows VM信息并导出CSV'
  inputs:
    azureSubscription: '这里替换为你之前创建的Azure服务连接名称'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      # 定义输出文件路径
      OUTPUT_FILE="$(Build.ArtifactStagingDirectory)/windows_vm_details.csv"
      # 写入CSV表头
      echo "subscription,resource_group,spn,vm-name,windows_os_sku" > $OUTPUT_FILE

      # 如需要SPN字段取流水线使用的全局服务主体名称,取消下一行注释即可
      # CURRENT_SPN=$(az ad sp show --id $(az account show --query user.name -o tsv) --query displayName -o tsv)

      # 遍历所有SPN有权限的订阅
      az account list --query [].id -o tsv | while read sub_id
      do
        # 切换当前操作订阅
        az account set --subscription $sub_id
        sub_name=$(az account show --query name -o tsv)
        
        # 拉取当前订阅下所有Windows VM的指定字段
        az vm list \
          --query "[].{rg:resourceGroup, vm_name:name, vm_spn:identity.principalId, os_sku:storageProfile.imageReference.sku}" \
          --filter "osProfile.windowsConfiguration!= null" \
          -o tsv | while read rg vm_name vm_spn os_sku
        do
          # 无托管标识的VM的SPN字段默认填N/A,如需替换为全局SPN可将下方$vm_spn改为$CURRENT_SPN
          final_spn=${vm_spn:-"N/A"}
          # 写入CSV行
          echo "$sub_name,$rg,$final_spn,$vm_name,$os_sku" >> $OUTPUT_FILE
        done
      done

- task: PublishBuildArtifacts@1
  displayName: '发布VM详情导出文件'
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'Windows_VM_Details'
    publishLocation: 'Container'

使用步骤

  1. 将上述YAML内容复制到Azure DevOps流水线编辑器中,替换azureSubscription参数值为你实际创建的服务连接名称
  2. 按需调整触发规则,比如添加定时触发器实现定期自动导出
  3. 手动触发流水线运行,等待运行完成后,进入本次运行的详情页面,点击「产物」标签即可下载导出的CSV文件

注意事项

  • 若仅需要导出单个/指定订阅的VM信息,可删除遍历订阅的循环逻辑,直接az account set指定固定订阅ID即可
  • 若拉取时出现权限报错,请检查SPN是否已获得对应订阅的读取权限
  • 可根据需求调整az vm list的--query参数,增加需要导出的其他VM属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:36:04