Description

The first half of the script calculates the TOP 5 folders (by size) and lists them out. The second half of the script calculates the TOP 5 folders (by size) by looking at the total size of files for a particular extension. In this example, I am looking for files of the extension type .trc.

Customizations possible:

1. Change the TOP 5 to TOP n. This would require increasing the loop counter value and the array element size.

2. Add multiple loops to calculate TOP n folders for specific file extensions: .trc, .mdmp, .txt, .avi etc.

Script

PowerShell
Edit|Remove
######################################### 
########## The following script fetches  ########### 
########## the TOP 5 folders (by size) ########### 
########## from any given directory.  ############ 
######################################### 
############## Author: Amit Banerjee ########### 
############## Date9/2/2010 ############### 
######################################### 
 
cls 
 
# Declare list of array to hold the TOP 5 folders 
[Array] $vLargestFolderSize = @(0,1,2,3,4
[Array] $vLargestFolder = @("","","","",""
 
# Store the starting folder name 
$startFolder = "C:\Windows" 
 
$vStartTime = (Get-Date).Hour.ToString()+":"+(Get-Date).Minute.ToString() 
$objFSO = New-Object -com  Scripting.FileSystemObject 
 
# Get all the folders in the directory 
$colItems = (Get-ChildItem $startFolder | Where-Object {$_.PSIsContainer -eq $True}
foreach ($i in $colItems) 
    { 
  $vFolderSize = $objFSO.GetFolder($i.FullName).Size 
  for ($x = 0; $x -le 4; $x++) 
  { 
   if ($vLargestFolderSize[$x] -le $vFolderSize) 
   { 
    if($x -lt 4
    { 
     for ($y = $x; $y -le 3; $y++) 
     { 
      $vLargestFolderSize[($x+1)] = $vLargestFolderSize[$x] 
      $vLargestFolder[($x+1)] = $vLargestFolder[$x] 
     } 
    } 
    $vLargestFolderSize[$x] = $vFolderSize 
    $vLargestFolder[$x] = $i.FullName 
    break
   } 
  } 
  # Uncomment to get folder sizes for all folders in the directory 
  # Write-Host ($i.FullName + ": " + "{0:N2}" -f ($vFolderSize / 1MB) + " MB"
    } 
 
# Loop to get the TOP 5 folders 
Write-Host "TOP 5 folders by size" 
for ($x = 0; $x -le 4; $x++) 
{ 
   Write-Host ("Folder " + ($x+1) + ": " + $vLargestFolder[$x] + ": " + "{0:N2}" -f ($vLargestFolderSize[$x] / 1MB) + " MB"
 
} 
 
[Array] $vLargestFolderSize = @(0,1,2,3,4
[Array] $vLargestFolder = @("","","","",""
 
$colItems = Get-ChildItem $startFolder -recurse |Where-Object {$_.PSIsContainer -eq $True} | Sort-Object -ErrorAction SilentlyContinue 
foreach ($i in $colItems) 
{ 
        $subFolderItems = Get-ChildItem $i.FullName | Where-Object {$_.Extension -eq ".trc"} | Measure-Object -property length -sum -ErrorAction SilentlyContinue 
  for ($x = 0; $x -le 4; $x++) 
  { 
   if ($vLargestFolderSize[$x] -le $subFolderItems.sum) 
   { 
    if($x -lt 4
    { 
     for ($y = $x; $y -le 3; $y++) 
     { 
      $vLargestFolderSize[($x+1)] = $vLargestFolderSize[$x] 
      $vLargestFolder[($x+1)] = $vLargestFolder[$x] 
     } 
    } 
    $vLargestFolderSize[$x] = $vFolderSize 
    $vLargestFolder[$x] = $i.FullName 
    break
   } 
  } 
        #$i.FullName + " -- " + "{0:N2}" -f ($subFolderItems.sum / 1MB) + " MB" 
} 
 
# Loop to get the TOP 5 folders for .trc files 
Write-Host "TOP 5 folders by size (for .trc files)" 
for ($x = 0; $x -le 4; $x++) 
{ 
   Write-Host ("Folder " + ($x+1) + ": " + $vLargestFolder[$x] + ": " + "{0:N2}" -f ($vLargestFolderSize[$x] / 1MB) + " MB"
 
} 
 
 
$vEndTime = (Get-Date).Hour.ToString()+":"+(Get-Date).Minute.ToString() 
"Start Time: " + $vStartTime 
"End Time: " + $vEndTime