Scripts/Remove-Azure-OldArmDeployments.ps1
Param( [string]$resourceGroup, [int]$numberRetained=100 ) # Remove all deployments for the resource group, retaining only the first $numberRetained. # There is an arbitrary limit of 800 deployments for a resource group. $Global:acces_token = ""; $Global:subscriptionId = ""; function Get-AzCachedAccessToken() { $ErrorActionPreference = 'Stop' if(-not (Get-Module Az.Accounts)) { Import-Module Az.Accounts } $azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile if(-not $azProfile.Accounts.Count) { Write-Error "Ensure you have logged in before calling this function." } $currentAzureContext = Get-AzContext $Global:subscriptionId = $currentAzureContext.Subscription.Id $profileClient = New-Object Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient($azProfile) Write-Debug ("Getting access token for tenant" + $currentAzureContext.Tenant.TenantId) $token = $profileClient.AcquireAccessToken($currentAzureContext.Tenant.TenantId) $Global:acces_token = $token.AccessToken Write-Host "Access-token and subscriptionId retrieved" } $deployments = Get-AzResourceGroupDeployment -resourceGroupName $resourceGroup $numberOfDeployments = $deployments.Count if($numberOfDeployments -gt $numberRetained){ $numberDeleted = $numberOfDeployments - $numberRetained Write-Host "$numberOfDeployments deployments found. Cleaning up $numberDeleted deployments, retaining $numberRetained" Get-AzCachedAccessToken $deployments | Select-Object -Skip $numberRetained | ForEach-Object { $name = $_.DeploymentName Write-Host "Cleaning up deployment: $name" $params = @{ Method = 'Delete' Headers = @{ 'authorization'="Bearer $Global:acces_token" } URI = "https://management.azure.com/subscriptions/$Global:subscriptionId/resourcegroups/$resourceGroup/providers/Microsoft.Resources/deployments/" + $name + "?api-version=2019-05-10" } Invoke-RestMethod @params Write-Host "Removed deployment $name" } } else { Write-Host "$numberOfDeployments found. Nothing to clean." } |