如何通过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'
使用步骤
- 将上述YAML内容复制到Azure DevOps流水线编辑器中,替换
azureSubscription参数值为你实际创建的服务连接名称 - 按需调整触发规则,比如添加定时触发器实现定期自动导出
- 手动触发流水线运行,等待运行完成后,进入本次运行的详情页面,点击「产物」标签即可下载导出的CSV文件
注意事项
- 若仅需要导出单个/指定订阅的VM信息,可删除遍历订阅的循环逻辑,直接
az account set指定固定订阅ID即可 - 若拉取时出现权限报错,请检查SPN是否已获得对应订阅的读取权限
- 可根据需求调整
az vm list的--query参数,增加需要导出的其他VM属性
内容的提问来源于stack exchange,提问作者Zuhaib Rana
相关产品推荐
相关产品推荐

