当前位置: 首页 > 知识库问答 >
问题:

递归列出Azure资源组中的所有资源标记

西门展
2023-03-14

我们有大量Azure订阅,目前已达到数百个。

我希望生成一个报告(理想情况下使用Azure Powershell或Azure CLI),以递归方式提取分配给每个资源组中每个资源的所有标记的列表,用于40-50个订阅。

目前,我可以列出在资源组级别分配的所有标记,但我无法找到一种方法来列出分配给每个资源组中的各个资源的标记。我要提取此报告的订阅和资源组列表保存在CSV文件中,该文件包括两列,分别显示订阅名称和资源组。

任何关于如何实现上述目标的建议都将是非常棒的,我们将不胜感激。

共有2个答案

阎宾实
2023-03-14

基于杨依凡的逻辑。我已经构建了PowerShell脚本;

#---------声明变量------------------------------------#

$bnsSubscription = Get-AzSubscription
$day = Get-Date -Format " ddMMMyyyy"
$tagPath = "C:\mytempfolder\"+"$day-Tag-Details.csv"
$tagFolderPath = "C:\mytempfolder\"

#---------声明变量------------------------------------#

function Get-ResourceTag {

    foreach ($subs in $bnsSubscription) {
        Select-AzSubscription -SubscriptionName $subs.Name | Out-Null 
        Write-Host 'The selected Subscription is' ($subs).Name
        New-Item -ItemType file -Path "$tagFolderPath\$($subs.Name).csv" -Force
        $resource_groups = Get-AzResourceGroup
        $resource_groups_details = Get-AzResourceGroup | Sort-Location ResourceGroupName | Format-Table -GroupBy Location ResourceGroupName,ProvisioningState,Tags
        Write-Host 'The selected Resource Group is' ($resource_groups).Name 'and the tag information as follows'
        #$resource_groups_details
        $resource_groups | Select-Object ResourceGroupName,Tags | Export-CSV -Path "$tagFolderPath\$($subs.Name).csv"  -Append


        $OutputFile = @()
        foreach($rg in $resource_groups){
            $azure_resources = Get-AzResource -ResourceGroupName $rg.ResourceGroupName

            $TestTags = $Resource.Tags.GetEnumerator()

            foreach($r in $azure_resources){

                Write-Host 'The selected resource is' ($r).Name 'and the information as follows'
                
                $RGHT = New-Object "System.Collections.Generic.List[System.Object]"
                $RGHT.Add("RGName",$r.ResourceGroupName)
                $RGHT.Add("ResourceName",$r.name)
                $RGHT.Add("Location",$r.Location)
                $RGHT.Add("Id",$r.ResourceId)
                $RGHT.Add("ResourceType",$r.ResourceType)
                $RGHT.Add("ResourceTags",$r.Tags)

                $OutputFile += New-Object psobject -Property $RGHT

                $OutputFile | Export-Csv -Path "C:\mytempfolder\test22.csv" -append -NoClobber -NoTypeInformation -Encoding UTF8 -Force

           
            }
        }
    }

    
}

#---------调用函数------------------------------------#

Get-ResourceTag
董光霁
2023-03-14

不是详细的代码,而是这里的想法。

1.您应该编写一个循环,在循环中,每次使用这个cmdlet更改订阅

Set-AzContext-订阅$subscription_name

2.然后使用此cmdlet获取指定的订阅中的所有资源组:

$resource_groups = Get-AzResourceGroup

3.然后编写一个嵌套循环(每个资源组的循环),在该嵌套循环中,使用此cmdlet获取资源组中的所有azure资源

foreach($rg in $resource_groups){
   $azure_resources = Get-AzResource -ResourceGroupName $rg.ResourceGroupName
}

4.在步骤3中编写另一个嵌套循环,此循环用于遍历指定的资源组中的所有azure资源。然后使用下面的代码为资源组中的每个azure资源获取标记:

foreach($r in $azure_resources){
     #the following code can get all the tags for one resource
     $r.tags

}

 类似资料:
  • 有没有办法在AWS帐户中列出所有可计费资源(基本上是EC2、EBS、RDS)。是否有任何aws cli命令或脚本可用于执行此操作。 我有aws帐户root访问权限。

  • 我试图完全清理资源组在Azure。 删除资源组不是选项(访问权限:参与者,而不是所有者) 做到这一点的最优雅和明显的方法(也在一些文章中描述)是使用“空”部署模板执行完整的部署: 删除SQL Server开始“...”接受“...”失败“...”开始“...”接受“...”失败“... 你想到主意了。 其他时候效果很好。 您将得到数据库删除的无限循环“开始..接受..失败..开始..接受..失败.

  • 有没有办法列出AWS中的所有资源?对于所有区域,所有资源...例如列出所有EC2实例、所有VPC、API Gateway中的所有API等...我想列出我帐户的所有资源,因为我很难找到我现在可以放弃的资源。

  • 介绍公有云平台上资源如何同步到云联壹云平台 公有云平台上的资源与 云联壹云 平台的项目对应关系由以下几个因素决定的。 资源归属项目 在添加云账号时,不勾选自动创建项目,并选择资源归属项目,则公有云上的资源都将同步到资源归属项目中。公有云上的项目都将对应到 云联壹云 平台的资源归属项目。 自动创建项目 在添加云账号时,勾选自动创建项目,将会按照公有云的项目在 云联壹云 平台创建一一对应的同名项目,公

  • 我在azure中有一个设置,在一个资源组中组合了一组资源。我希望我的服务位于西欧,因此我的所有资源都在那里(如果可能) 我刚刚注意到,当创建资源组时,我不小心使用了美国西部。 因此,当前的设置是: 资源组1(美国西部) 应用服务1(西欧) 应用服务2(西欧) SQL服务器(西欧) 存储帐户(西欧) (西欧) 我是否可以更改资源组的位置而不必创建新组并每次迁移? 也许更重要的是:我应该改变位置还是不

  • 使用AzureJavaSDK列出资源组中存在的Azure数据库for PostgreSQL服务器的最佳和正确方法是什么?目前,我们有使用ARM模板进行的部署,一旦部署了资源,我们希望能够从Azure本身获取有关这些资源的信息。我尝试过以下方法: 但是返回的列表大小是。 但是,对于虚拟机,我可以通过以下方式获取信息: 那么,使用AzureJavaSDK获取有关的信息的正确方法是什么? P. S.一旦