Azure uses Tagging for easier management. Tagging is done with Key value pairs. You can create the manually in the Azure Portal but you can also do it programatically via Powershell (For Example)
For this example Log onto the Azure Portal, Open Cloud Shell (This is the new Azure Portal, Not classic)

And set it to run with powershell

Just to get warmed up, lets list all our Resource groups
Get-AzResourceGroup
You can right click in powershell and paste the code above. then click Enter

This gives you a list of all your resource Groups

You even get a list of tags for each resource group with the above command
However, the resource groups that are available to me currently are the ones on my personal visual studio subscription. the Current Subscription
Lets see what subscriptions we have available
Get-AzureRMSubscription


You get the Subscription Name, ID and TenantID
Lets find out the current Subscription Context
Get-AzureRmContext

You can also use the following command to get subscription details
(Get-AzureRmContext).Subscription

Now we want to change the current Subscription context. this example is going to look at a resource group and a resource in our Proof Of Concept Subscription
Set-AzContext -SubscriptionId "xxxx-xxxx-xxxx-xxxx"
The ID can be generated by using Get-AzureRMSubscription
And running Get-AzureRmContext again, provides you with confirmation that you have changed subscriptions
Now lets have a look at all the resource groups within this subscription with Get-AzResourceGroup again

These are the two resource groups we are interested in. POC has no tags and training Resources have a couple of tags at resource group Level.
Get-AzureRmResource | ft
This scrips allows you to get a list of all the resources and Resource groups within the current subscription

What I want to do now is check all the tags on the resource Group
(Get-AzResource -ResourceGroupName POC_Resource_Group).Tags

This function allows us to see every tag at resource level against the Resource group. So this script doesnt quite give us what we want. We know that there are no tags at resource group level. How do we establish this with Powershell?
$resourceGroup = Get-AzResourceGroup -Name POC_Resource_Group Get-AzTag -ResourceId $resourceGroup.ResourceId
This script allows us so see the tags on the Resource Group.
It would now be useful to get a list of Resources in the resource Group
Get-AzureRmResource -ResourceGroupName POC_Resource_Group | ft


So now we can see every resource in the Resource group
Next step is to have a look at tags per resource
(Get-AzureRmResource -Name "AdventureWorksDW").Tags
We know what our Resources are called now (See Above) so we can get specific tags of a resource group

Scripts to Add tags to a Resource Group
It would be really good to have the following tag at resource group level
- businessProcess, Proof of Concept
- environmentType, Dev
- client, na
- billingCategory, Internal Analytics
Lets have a go with powershell
$tags = @{"businessProcesst"="Proof of Concept"; "environmentType"="Dev"; "client"="na"; "billingCategory"="Internal Analytics"} $resourceGroup = Get-AzResourceGroup -Name POC_Resource_GroupNew-AzTag -ResourceId $resourceGroup.ResourceId -tag $tags

The resource group now has Tags
Scripts to add tags to a resource
Completely update the List of Tags
We also want to add a tag to a resource.
If you were to use the following script
$tags = @{"costCentre"="000000"} $resource = Get-AzResource -Name AdventureWorksDW -ResourceGroup POC_Resource_Group New-AzTag -ResourceId $resource.id -Tag $tags
And then run (Get-AzureRmResource -Name “AdventureWorksDW”).Tags to look at the tags, this script deletes all the tags and inserts just the one, this isn’t the logic we want to use. We want to Add tags to a Resource that already has tags
Add Tags to a resource that already has tags
$resource = Get-AzResource -Name AdventureWorksDW -ResourceGroup POC_Resource_Group $tags = @{"costCentre"="000000"} Update-AzTag -ResourceId $resource.id -Tag $tags -Operation Merge
Instead of New, Update has been used. and we gave the script a resource name and a resource group
(Get-AzureRmResource -Name “AdventureWorksDW”).Tags shows that the new tag has been added to the previous tags

Amend a Tag
After running (Get-AzureRmResource -Name “AdventureWorksDW”).Tags, adventureworkks is a value that has been inputted incorrectly and needs amending.
$resource = Get-AzResource -Name AdventureWorksDW -ResourceGroup POC_Resource_Group $tags = @{"applicationName"="adventureworks"} Update-AzTag -ResourceId $resource.id -Tag $tags -Operation Merge

Great. The incorrect value has been updated
Get Tags
a couple more really useful Scripts in regards to tags
Get-AzureRmTag

This script allows you to see all your tags and how many times they are used within the subscription
From the above script we can see that businessProcesst is a tag that has been added which needs amending to businessProcess (Its been incorrectly typed in)

Get more information about the Tag (Tag Values and Count of Use)
Get-AzureRmTag -Name "environmentType"

This script is great for looking at the values in a specific tag. And in this case we want to know more about businessProcesst
Get-AzureRmTag -Name "businessProcesst"

And to really tie it down we want to know what resource or resource Group it belongs too?
You can run the following Script to get the Specific resource Group for the tag
(Get-AzResourcegroup -Tag @{ “businessProcesst"="Proof of Concept"}).ResourceGroupName

Its in the Proof of Concept Resource group so all that is needed is to delete and recreate
And this Script checks if its against any resources
(Get-AzResource -Tag @{ “businessProcesst"="Proof of Concept"}).Name
In this case No
Remove-AzureRmTag -Name "businessProcesst"

Although we have checked, the error message stills says that the Tag is being referenced by resources.
It may be easier to update the Tag in Azure rather than using Code. there doesnt appear to be a way of changing the tag name in poweshell (Or at least I haven’t found it yet)
You can go to tags. Click on the Tag. Then click on … at the end of the tag Row and choose Edit tags.

Then Save
This just gives a flavor of how to use powershell to manage tags. This information can be saved into Scripts so we can reproduce the creation of tags if required.
Tags applied to resource Groups don’t get added to the Resources below. Powershell gives you move control over making sure the Resources and resources Groups have the correct tags applied