Powershell folder size of folders without listing Subdirectories

后端 未结 10 2251
北海茫月
北海茫月 2021-01-30 21:40

I have found several resources that use the following script to get folder sizes

$colItems = (Get-ChildItem $startFolder -recurse | Where-Object {$_.PSIsContaine         


        
10条回答
  •  猫巷女王i
    2021-01-30 22:18

    This is something I wind up looking for repeatedly, even though I wrote myself a nice little function a while ago. So, I figured others might benefit from having it and maybe I'll even find it here, myself. hahaha

    It's pretty simple to paste into your script and use. Just pass it a folder object.

    I think it requires PowerShell 3 just because of the -directory flag on the Get-ChildItem command, but I'm sure it can be easily adapted, if need be.

    function Get-TreeSize ($folder = $null)
    {
        #Function to get recursive folder size
        $result = @()
        $folderResult = "" | Select-Object FolderPath, FolderName, SizeKB, SizeMB, SizeGB, OverThreshold
    
        $contents  = Get-ChildItem $folder.FullName -recurse -force -erroraction SilentlyContinue -Include * | Where-Object {$_.psiscontainer -eq $false} | Measure-Object -Property length -sum | Select-Object sum
        $sizeKB = [math]::Round($contents.sum / 1000,3)   #.ToString("#.##")
        $sizeMB = [math]::Round($contents.sum / 1000000,3)   #.ToString("#.##")
        $sizeGB = [math]::Round($contents.sum / 1000000000,3)   #.ToString("#.###")
    
        $folderResult.FolderPath = $folder.FullName
        $folderResult.FolderName = $folder.BaseName
        $folderResult.SizeKB = $sizeKB
        $folderresult.SizeMB = $sizeMB
        $folderresult.SizeGB = $sizeGB
        $result += $folderResult
    
        return $result
    } 
    
    
    #Use the function like this for a single directory
    $topDir = get-item "C:\test"
    Get-TreeSize ($topDir)
    
    #Use the function like this for all top level folders within a direcotry
    #$topDir = gci -directory "\\server\share\folder"
    $topDir = Get-ChildItem -directory "C:\test"
    foreach ($folderPath in $topDir) {Get-TreeSize $folderPath}  
    

提交回复
热议问题