Get-DirSize (modification of post by view diff)
embed code: <script type="text/javascript" src="http://PoshCode.org/embed/1185"></script>download | new post
A v2.0 function to recursively get the sizes of all subdirectories under a root path.
- function Get-DirSize {
- <#
- .Synopsis
- Gets a list of directories and sizes.
- .Description
- This function recursively walks the directory tree and returns the size of
- each directory found.
- .Parameter path
- The path of the root folder to start scanning.
- .Example
- # Get the largest folder under the user profile
- PS> (Get-DirSize $env:userprofile | sort Size)[-1]
- .Example
- # Get the folder sizes of all folders under each folder in $folders
- PS> $folders | Get-DirSize
- .Example
- # Create a tab-separated text file of Folders and Sizes
- PS> 'Folder', 'Size' -join "`t" > folder_sizes.txt
- PS> Get-DirSize C:\MyFolder | Sort-Object Size -desc |
- >> %{$_.Folder, $_.Size -join "`t"} >> folder_sizes.txt
- .ReturnValue
- An object with Folder and Size properties.
- #>
- param([Parameter(Mandatory = $true, ValueFromPipeline = $true)][string]$path)
- BEGIN {}
- PROCESS{
- $size = 0
- $folders = @()
- foreach ($file in (Get-ChildItem $path -Force -ea SilentlyContinue)) {
- if ($file.PSIsContainer) {
- $subfolders = @(Get-DirSize $file.FullName)
- $size += $subfolders[-1].Size
- $folders += $subfolders
- } else {
- $size += $file.Length
- }
- }
- $object = New-Object -TypeName PSObject
- $object | Add-Member -MemberType NoteProperty -Name Folder `
- -Value (Get-Item $path).FullName
- $object | Add-Member -MemberType NoteProperty -Name Size -Value $size
- $folders += $object
- Write-Output $folders
- }
- END {}
- }
Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.
PowerShell Code Repository