【问题标题】:What is the C# equivalent of Get-AzureRmResource in .NET SDK for Azure?.NET SDK for Azure 中 Get-AzureRmResource 的 C# 等效项是什么?
【发布时间】:2023-03-15 15:29:01
【问题描述】:

我想知道是否有任何 .NET 方法可以获取订阅下的所有资源。这在 PowerShell 中的 cmdlet 中可用:Get-AzureRmResource。

谢谢

【问题讨论】:

  • 谷歌搜索 C# Azure Resource Manager 会在顶部结果中返回指向 Azure SDK 文档的链接:Azure Resource Manager libraries for .NET。文档指向 Github 示例项目 like this one,用于使用资源管理器管理资源。你有没有尝试过但失败了?
  • 是的,我在文档和类库中寻找它们,但从未找到。我想通过发布这个问题来确保我没有遗漏任何东西;因为我的发展将取决于此。
  • I would like to know if there are any .NET method to get all resources under a subscription 我找不到与 powerShell cmdlet Get-AzureRmResource 等效的 .NET,它将列出订阅下的所有资源
  • 谢谢,@Akiyoshi Tsuchida 您节省了很多开发时间!

标签: c# .net azure powershell


【解决方案1】:

正如英国人所说,Good Grief!

TL;DR

试试:

using Microsoft.Azure.Management.ResourceManager.Fluent;
...

var rm = ResourceManager.                    
                .Configure()
                .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
                .Authenticate(credentials)
                .WithDefaultSubscription();

var resources= rm.GenericResources.List();

foreach(IGenericResource res in resources)
{
    ....
}

TL;DR 2

一些 cmets 指向 ResourceOperationsExtensions.List 扩展方法。不过,这需要一个 IResourceOpearations 实例。这可通过IResourceManagementClient.Resources 获得。这可以通过ResourceManager.Inner 属性访问:

var rmOps=rm.Inner.Resources;
var resources = rmOps.List(someODataQuery);

加长版

Azure 的管理通过公开 REST 接口来工作。最后,Azure SDK 和 Powershell 命令行开关都会调用该 REST 接口。您可以使用Fiddler 或其他调试代理来捕获和重用

Powershell 命令行开关是在 SDK 之上实现的,这意味着您可以look at the source code itself

命令行开关使用 ResourceManagerSdkClient 类的 ListResources 方法和从其参数生成的 OData 查询:

result = this.ResourceManagerSdkClient.ListResources(odataQuery);

不幸的是,这无济于事,因为命令行开关使用它们自己的低级抽象,而 Azure RM libraries 使用不同的抽象和接口。 ListResources 告诉我们,我们需要查询一个 GenericResource。

Azure Resource Manager libraries repo 托管在 Github 上。 documentation 没有显示如何到达 ResourceManager。在 repo 本身中搜索,显示如何在 the tests 中使用 ResourceManager

ResourceManager.GenericResources 提供对 Powershell 命令使用的相同通用资源的访问。该属性的类型是IGenericResources,它又实现了ISupportsListing,这使我们可以访问List

文档没有明确说明这些接口是否已明确实现。代码可能需要显式转换。

IGenericResources也实现了ISupportsListingByResourceGroupISupportsListingInResourceGroupByTag,可用于按资源组和标签进行搜索。

搜索ResourceManager.GenericResourcesGenericResources.List() 等不会产生相关结果。这些术语太……笼统了。

我想我现在要休息一下。

【讨论】:

  • 从您的第一个答案开始:似乎没有WithDefaultSubscription 方法,只有WithSubscription 方法。你参考了什么来得到它? (它是某处的扩展方法吗?)
【解决方案2】:

我认为您正在寻找Azure Resource Manager libraries for .NET,详情请参阅此doc

GitHub 中有一个示例项目,您可以下载并使用它进行测试。在这个示例项目中,您可以创建/更新/列出资源(相当于get-AzureRmResource

【讨论】:

    猜你喜欢
    • 2010-09-21
    • 2017-11-21
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多