public/Get-AzureEmptyResourceGroups.ps1


function Get-AzureEmptyResourceGroups {

<#
 
.SYNOPSIS
Get Emptyresource groups and delete them.
 
 
.DESCRIPTION
Get-AzureEmptyResourceGroups cmdlet finds the empty resourcegroups and return them to be deleted.
 
 
.PARAMETER subscriptionName
Specify the subscriptionName to find the empty resource groups in that specified subscription.
 
.PARAMETER delete
Specify $true to delete resource groups, default is $false to strictly return empty resource groups.
 
.EXAMPLE
Get-AzureEmptyResourceGroups -subscriptionName <subscriptionName>
 
Only return resource groups, without deleting.
 
.EXAMPLE
Get-AzureEmptyResourceGroups -subscriptionName <subscriptionName> -delete $true
 
Delete empty resource groups.
 
#>

    [cmdletbinding()]

    param (
    
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$subscriptionName,

        [Parameter()]
        [bool]$Delete = $false
    
    )


    Process 
    {

        # check to see if local token exists (ran Login-AzureRMAccount)
        if (($null -eq (Get-AzureRmContext).Account)) {
            Write-Warning "Please run < Login-AzureRMAccount > first to create a session token...exiting."
            break
        } 

        Try {
            Select-AzureRmSubscription -SubscriptionName $subscriptionname -ErrorAction Stop -Verbose | Out-Null
        }
        Catch {
            $error[0].Exception
            break
        }

        $resources = Get-AzureRmResource
        $rgs = Get-AzureRmResourceGroup
        $emptyrgs = @()

        foreach ($r in $rgs) {

            $validate = $Resources | Where-Object {$_.resourcegroupname -like $r.resourcegroupname}

            if ($validate.count -eq 0) {
                $emptyrgs += $r.resourcegroupname
            }
            elseif ($validate.count -ge 1) {
                Write-Verbose "$($r.ResourceGroupName) contains resources"
            }

        }

        if ($emptyrgs.count -ne 0) {

            Write-Warning "Empty resource group were found, returning..."
            # Delete empty resource groups if 'Delete' is set to true.
            if (($Delete -eq $true)) {
                Write-Warning "'Delete' bool set to true, deleting empty resource groups."

                Try {
                    $emptyrgs | ForEach-Object {Remove-AzureRmResourceGroup -Name $_ -Force -ErrorAction Stop -Verbose}
                    return $deletergs
                    
                }
                Catch {
                    $error[0]
                    break
                }
            }
            Write-Output "'Delete' bool set to false (default), returning empty resources group WITHOUT deleting."
            return $emptyrgs

        }
        else {
            Write-Output "No empty resources groups found."
        }


        
    }

}