Private/Size/GetFolderSize.ps1

function Get-FolderSize {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true, Position=0)]
        [string]$Path,
        
        [Parameter()]
        [switch]$Recurse,
        
        [Parameter()]
        [switch]$HumanReadable
    )
    
    $folders = if ($Recurse) {
        Get-ChildItem -Path $Path -Directory -Recurse
    } else {
        Get-ChildItem -Path $Path -Directory
    }
    
    $results = foreach ($folder in $folders) {
        $size = (Get-ChildItem $folder.FullName -Recurse -File -ErrorAction SilentlyContinue | 
                Measure-Object -Property Length -Sum).Sum
        
        $readableSize = if ($HumanReadable) {
            # Convert to human-readable format
            $sizes = @(' B', 'KB', 'MB', 'GB', 'TB')
            $order = 0
            $value = $size
            
            while ($value -ge 1024 -and $order -lt 4) {
                $order++
                $value /= 1024.0
            }
            
            "{0:0.##}{1}" -f $value, $sizes[$order]
        } else {
            $size
        }
        
        [PSCustomObject]@{
            Folder = $folder.FullName
            Size = $size
            ReadableSize = $readableSize
        }
    }
    
    return $results | Sort-Object Size -Descending
}