Category: Powershell

Get size of folder and sub folders recursively with Windows Powershell:

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 {}
}


'Folder', 'Size' -join "`t" > folder_sizes.txt
Get-DirSize "[C:PATHXXX" | Sort-Object Size -desc | %{$_.Folder, $_.Size -join "`t"} >> folder_sizes.txt

Tags:

powershell

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count: