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

使用C#从Azure Compute Gallery获取带版本的镜像定义并按名称过滤

C# 获取Azure Compute Gallery镜像定义及对应版本并按名称过滤

直接调用REST API时,镜像定义和版本是独立的资源接口,需要分别请求,且过滤逻辑需手动实现;更高效的方式是使用Azure .NET ARM SDK完成需求,以下是具体方案:

一、使用Azure .NET ARM SDK(推荐)

1. 安装依赖包

安装最新版的Azure.ResourceManager.Compute NuGet包,这是Azure官方推荐的新一代ARM管理SDK。

2. 代码实现

using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Compute;

// 初始化ARM客户端(支持本地调试和生产环境的默认认证方式)
var credential = new DefaultAzureCredential();
var armClient = new ArmClient(credential);

// 替换为你的资源信息
string subscriptionId = "你的订阅ID";
string resourceGroupName = "你的资源组名称";
string galleryName = "你的Compute Gallery名称";
string targetImageKeyword = "要过滤的镜像名称关键词"; // 示例:"WindowsServer2022"

// 获取目标Compute Gallery资源
var subscription = armClient.GetSubscriptionResource(new ResourceIdentifier($"/subscriptions/{subscriptionId}"));
var resourceGroup = await subscription.GetResourceGroupAsync(resourceGroupName);
var gallery = await resourceGroup.GetGalleryAsync(galleryName);

// 按名称过滤镜像定义,支持模糊匹配
var filteredImageDefinitions = gallery.GetGalleryImages()
    .Where(img => img.Data.Name.Contains(targetImageKeyword, StringComparison.OrdinalIgnoreCase));

// 遍历每个镜像定义,获取对应的所有镜像版本
foreach (var imageDefinition in filteredImageDefinitions)
{
    Console.WriteLine($"镜像定义: {imageDefinition.Data.Name}");
    Console.WriteLine("关联镜像版本:");
    
    // 异步获取所有版本,SDK自动处理分页
    await foreach (var version in imageDefinition.GetGalleryImageVersions().GetAllAsync())
    {
        Console.WriteLine($"  - 版本号: {version.Data.Name} | 发布时间: {version.Data.PublishedOn}");
    }
    Console.WriteLine("---");
}

关键说明

  • 认证逻辑:DefaultAzureCredential支持本地调试(Azure CLI、VS登录)和生产环境(托管标识、服务主体),无需硬编码密钥。
  • 过滤规则:通过Where结合Contains实现名称模糊匹配,如需精确匹配可替换为img.Data.Name == targetImageKeyword。
  • 版本关联:每个镜像定义资源通过GetGalleryImageVersions()方法直接关联其下所有版本,SDK自动处理响应序列化和分页。

二、若坚持使用REST API

  1. 过滤获取镜像定义:
    调用GET请求并添加$filter参数实现名称过滤:
    GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images?$filter=contains(name,'{targetKeyword}')
    
  2. 获取对应镜像版本:
    对每个返回的镜像定义,调用以下接口获取其关联版本:
    GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageDefinitionName}/versions
    
    注意:需自行处理认证、分页及响应JSON的序列化解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 09:47:26