Downloading Tags to manage them
  • Updated on 20 May 2020
  • 1 minute to read
  • Contributors
  • Print
  • Comments
  • Share
  • Dark

Downloading Tags to manage them

  • Print
  • Comments
  • Share
  • Dark

I have a script below which you can use to point at a resource group and download the resource tags to a csv file. The script basically goes through the resources and builds up a collection of powershell objects with a property for each of the tags i am interested in. I will then export them to the csv file.

What I usually do is to download the dev/test/etc resource groups to seperate csv files so its easier to manage them. In the spreadsheet I can then modify and add tags as I wish.

Full Script

function DownloadResources([string] $csvPath, [string] $resourceGroup)
    $resourceDescriptions = New-Object "System.Collections.Generic.List[System.Object]" 
    $resources = Get-AzResource -ResourceGroupName $resourceGroup
    foreach ($resource in $resources) {

        Write-Host 'Processing ' $resource.Name

        $resourceDescription = New-Object -TypeName psobject
        $resourceDescription | Add-Member -MemberType NoteProperty -Name 'Name' -Value $resource.Name        
        $resourceDescription | Add-Member -MemberType NoteProperty -Name 'Type' -Value $resource.ResourceType
        $governanceTags = New-Object "System.Collections.Generic.Dictionary``2[System.String,System.Object]"         
        $governanceTags.Add('Tag_Environment', '')
        $governanceTags.Add('Tag_costCentre', '')
        $governanceTags.Add('Tag_managedBy', '')
        $governanceTags.Add('Tag_documentationLink', '')     

        #Process Tags
        if($resource.Tags -ne $null){
            foreach($tag in $resource.Tags.GetEnumerator()){  
                $key = $tag.Key
                $value = $tag.Value
                if($key.ToLower() -eq 'environment'){                   
                    $governanceTags['Tag_Environment'] = $value

                #Data Profile
                if($key.ToLower() -eq 'dataprofile'){
                    $governanceTags['Tag_dataProfile'] = $value

                if($key.ToLower() -eq 'costcentre'){
                    $governanceTags['Tag_costCentre'] = $value

                if($key.ToLower() -eq 'managedby'){
                    $governanceTags['Tag_managedBy'] = $value
                if($key.ToLower() -eq 'documentationLink'){
                    $governanceTags['Tag_documentationLink'] = $value

        #Add fields for Governance Tags
        foreach($governanceTag in $governanceTags.GetEnumerator()){  
            $csvFieldHeader = $governanceTag.Key
            $csvFieldValue = $governanceTag.Value

            $resourceDescription | Add-Member -MemberType NoteProperty -Name $csvFieldHeader -Value $csvFieldValue

        #Additional Properties for useful info and ID which is used when uploading the tags
        $resourceDescription | Add-Member -MemberType NoteProperty -Name 'Id' -Value $resource.Id
        $resourceDescription | Add-Member -MemberType NoteProperty -Name 'ResourceGroup' -Value $resourcegroup

    $resourceDescriptions | Export-Csv -Path $csvPath -NoTypeInformation    

$path = $PSScriptRoot + '\Resources.Dev.csv'
$resourceGroup = 'MyRG-Dev'
DownloadResources -csvPath $path -resourceGroup $resourceGroup

Was this article helpful?