functions/get-azurermresourcegroupext.ps1

<#
.SYNOPSIS
Get Azure RM Resource
 
.DESCRIPTION
Get Azure RM Resource
 
.PARAMETER SubscriptionName
Name of the Azure subscription that you want to work against
 
.PARAMETER ResourceGroupName
Name of the resource group that you want to work against
 
.PARAMETER WithoutTagOnly
Switch to instruct the cmdlet to only list resource groups without any tag details
 
.EXAMPLE
Get-AzureRmResourceGroupExt -SubscriptionName "DEV" -ResourceGroupName "*DEV*"
 
This will get the resource group that contains the search *DEV* inside thesubscription named DEV.
 
.EXAMPLE
Get-AzureRmSubscriptionExt -SubscriptionName "*dev*" | Get-AzureRmResourceGroupExt -ResourceGroupName "*DEV*"
 
This will get the subscription that matches the search *DEV* and get the ResourceGroup that matches the search *DEV*.
 
.EXAMPLE
Get-AzureRmSubscriptionExt -SubscriptionName "*dev*" | Get-AzureRmResourceGroupExt -WithoutTagOnly
 
This will get the subscription that matches the search *DEV* and get all ResourceGroups that doesn't have a tag collection specified.
 
.NOTES
Author: Mötz Jensen (@splaxi)
#>

Function Get-AzureRmResourceGroupExt {
    [CmdletBinding()]
    param(
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [string] $SubscriptionName,

        [Alias('Name')]
        [string] $ResourceGroupName = "*",

        [switch] $WithoutTagOnly
    )
    
    BEGIN {
        if ($SubscriptionName) {
            $sub = Get-AzureRmSubscription -SubscriptionName $SubscriptionName
            $null = Set-AzureRmContext -SubscriptionObject $sub
        }
    }

    PROCESS {
        
        Write-PSFMessage -Level Verbose -Message "Testing if we should work on resources without tags (true) or all resources (false)." -Target ($WithoutTagOnly.IsPresent)
        if ($WithoutTagOnly.IsPresent) {
            $resGroups = Get-AzureRmResourceGroup | Where-Object {$null -eq $_.tags -or $_.tags.Count -lt 1}
        }
        else {
            $resGroups = Get-AzureRmResourceGroup
        }

        Write-PSFMessage -Level Verbose -Message "Filtering all resource groups that doesn't match the name" -Target $ResourceGroup
        foreach ($item in $resGroups) {
            if ($item.Name -notlike $ResourceGroup) {continue}
            $item
        }
    }

    END {}

}