functions/Get-FolderSizeInfo.ps1
#requires -version 5.1 Function Get-FolderSizeInfo { [cmdletbinding()] [alias("gsi")] [OutputType("FolderSizeInfo")] Param( [Parameter(Position = 0, Mandatory, HelpMessage = "Enter a file system path like C:\Scripts.", ValueFromPipeline, ValueFromPipelineByPropertyName)] [ValidateNotNullOrEmpty()] [alias("PSPath")] [string[]]$Path, [Parameter(HelpMessage = "Include hidden directories")] [switch]$Hidden ) Begin { Write-Verbose "Starting $($MyInvocation.MyCommand)" } #Begin Process { foreach ($item in $path) { Write-Verbose "Measuring $item on $([System.Environment]::MachineName)" $cPath = (Convert-Path $item) if (Test-Path $cPath) { $d = [System.IO.DirectoryInfo]::new($cPath) if ($hidden) { $files = $d.GetFiles("*", "AllDirectories") } else { $files = $d.GetFiles() } $stats = $files | Measure-Object -property length -sum [pscustomobject]@{ PSTypename = "FolderSizeInfo" Computername = [System.Environment]::MachineName Path = $cPath TotalFiles = $stats.Count TotalSize = $stats.Sum } } else { Write-Warning "Can't find $Path on $([System.Environment]::MachineName)" } } #foreach item } #process End { Write-Verbose "Ending $($MyInvocation.MyCommand)" } } #close function #load format data file if found $fmt = "$PSScriptRoot\FolderSizeInfo.format.ps1xml" if (Test-Path $fmt) { Update-FormatData -AppendPath $fmt } |