如何使用Microsoft.Azure.Management.Fluent列出资源组中的资源?

时间:2019-11-19 10:16:36

标签: c# azure

我目前正在尝试使用Microsoft.Azure.Management.Fluent列出资源组中的所有资源,但我无法弄清楚。我知道了:

var azure Microsoft.Azure.Management.Fluent.Azure
            .Configure()
            .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
            .Authenticate(mycredentials)
            .WithDefaultSubscription();

var resourceGroup = azure.ResourceGroups.GetByName("MyResourceGroup");

但是现在我陷入了困境,因为看来我只能从资源组中获取基本数据(Id,名称等)。但是,如果我想要组中所有资源的名称/资源类型?

我发现此扩展方法似乎可以完成我想做的事情:

https://docs.azure.cn/zh-cn/dotnet/api/microsoft.azure.management.resourcemanager.fluent.resourcegroupsoperationsextensions.listresourcesasync?view=azure-dotnet

但是我不知道该从哪里获取IResourceGroupsOperations对象。

有些人似乎也在谈论ResourceManagementClient,但是有人在其构造函数中使用了一个简单的RestClient,所以感觉这应该是一种更简单的方法。

1 个答案:

答案 0 :(得分:1)

根据我的测试,我们可以在SDK Microsoft.Azure.Management.ResourceManager.Fluent中使用ResourceManagementClient列出一个资源组中的所有资源。详细步骤如下

  1. Use Azure CLI to create a service pricipal
 az login
 az ad sp create-for-rbac --name <ServicePrincipalName>
 az role assignment create --assignee <ServicePrincipalName> --role Contributor
  1. 代码
var tenantId = "<your tenant id>";
var clientId = "<your sp app id> ";
var clientSecret = "<your sp passowrd>";
var subscriptionId = "<your subscription id>";
AzureCredentials credentials = SdkContext.AzureCredentialsFactory.FromServicePrincipal(
                       clientId,
                       clientSecret,
                       tenantId,
                        AzureEnvironment.AzureGlobalCloud);
RestClient restClient = RestClient.Configure()
                                  .WithEnvironment(AzureEnvironment.AzureGlobalCloud)
                                  .WithCredentials(credentials)
                                  .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
                                  .Build();
ResourceManagementClient client = new ResourceManagementClient(restClient);
client.SubscriptionId = subscriptionId;
foreach (var resource in await client.Resources.ListByResourceGroupAsync("<your resource group name>")) {

       Console.WriteLine("Name:"+ resource.Name );


}

enter image description here