GinShell.Azure/Public/Remove-GsAzureSnapshot.ps1

function Remove-GsAzureSnapshot {
    <#
    .SYNOPSIS
        Deletes one or more Azure snapshots after revoking access.
    .PARAMETER Snapshot
        One or more Azure snapshot objects.
    .EXAMPLE
        Remove-GsAzureSnapshot -Snapshot $snapshots
    #>

    [CmdletBinding(SupportsShouldProcess)]
    param (
        [Parameter(Mandatory)]
        [object[]]$Snapshot
    )

    foreach ($snap in $Snapshot) {
        $snapName      = $snap.Name
        $resourceGroup = $snap.ResourceGroupName

        if (-not $PSCmdlet.ShouldProcess($snapName, "Delete snapshot in '$resourceGroup'")) { continue }

        try {
            Write-GsLog -Message "Revoking access for snapshot '$snapName'" -Type Info
            Revoke-AzSnapshotAccess -SnapshotName $snapName -ResourceGroupName $resourceGroup -ErrorAction SilentlyContinue

            Write-GsLog -Message "Deleting snapshot '$snapName' in resource group '$resourceGroup'" -Type Action
            Remove-AzSnapshot -SnapshotName $snapName -ResourceGroupName $resourceGroup -Force -ErrorAction Stop

            Write-GsLog -Message "Successfully deleted snapshot '$snapName'" -Type Success
        }
        catch {
            Write-GsLog -Message "Failed to delete snapshot '$snapName': $($_.Exception.Message)" -Type Error
        }
    }
}