Functions/Get-AHExtraDiskGBPaidFor.ps1

function Get-AHExtraDiskGBPaidFor {
    <#
.SYNOPSIS
    Gets every disk and returns how much space is paid for but not allocated.

.DESCRIPTION
    Get-AHExtraDiskGBPaidFor is a function that returns a list of Azure Disks and
    the size in GB that is being paid for but is not currently allocated.

.PARAMETER AllSubscriptions
    Run this command against all subscriptions.

.PARAMETER Subscription
    Specifies the subscription to run against. The default is the current subscription.

.EXAMPLE
     Get-AHExtraDiskGBPaidFor -AllSubscriptions

.EXAMPLE
     Get-AHExtraDiskGBPaidFor -AllSubscriptions | Export-Csv ExtraDiskGBPaidFor.csv -NoTypeInformation

.INPUTS
    String

.OUTPUTS
    Selected.Microsoft.Azure.Commands.Compute.Automation.Models.PSDiskList

.NOTES
    Author: Paul Harrison
#>

    [CmdletBinding()]
    param (
        [Switch]
        $AllSubscriptions,
    
        [Parameter(ValueFromPipeline = $true)]
        $Subscription
    )

    begin {
        Test-AHEnvironment
        Function Get-ExtraGBPaidForHelper {
            param(
                $disk
            )
            $PList = @(4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32767) #premium ssd
            $EList = @(4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32767) #standard ssd
            $SList = @(32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32767) #standard hdd
        
            If ($($disk.sku.Name) -like "*UltraSSD*") {
                0
            }
            ElseIf ($($disk.sku.Name) -like "*Premium*") {
                $allowedDiskSizes = $PList
            }
            Elseif ($($disk.sku.Name) -like "*StandardSSD*") {
                $allowedDiskSizes = $EList
            }
            Elseif ($($disk.sku.Name) -like "*Standard*") {
                $allowedDiskSizes = $SList
            }
        
            If ($allowedDiskSizes -contains $($disk.diskSizeGB)) {
                0
            }
            Elseif ($($disk.diskSizeGB) -gt $($allowedDiskSizes[$allowedDiskSizes.Count - 1])) {
                Write-Error "Disk size too big"
            }
            Else {
                If (($($disk.diskSizeGB) -lt $allowedDiskSizes[0])) {
                    $allowedDiskSizes[0] - $($disk.diskSizeGB)
                }
                Else {
                    For ($i = 0; $i -lt $($allowedDiskSizes.Count - 1); $i++) {
                        If (($($disk.diskSizeGB) -gt $allowedDiskSizes[$i]) -and ($($disk.diskSizeGB) -lt $allowedDiskSizes[($i + 1)])) {
                            $allowedDiskSizes[$i + 1] - $($disk.diskSizeGB)
                        }
                    }
                }
            }
        }
        $MyScriptBlock = {
            Get-AzDisk | Select-Object @{ N = "Subscription"; E = { (Get-AzContext).Subscription.Name } }, ResourceGroupName, Name, Id, OsType, DiskSizeGB, @{N = "ExtraGBPaidFor"; E = { Get-ExtraGBPaidForHelper -disk $_ } }
        }        
    }
    process {
        if ($Subscription) { $Subscription | Invoke-AzureCommand -ScriptBlock $MyScriptBlock }
        else { Invoke-AzureCommand -ScriptBlock $MyScriptBlock -AllSubscriptions:$AllSubscriptions }
    }
}