это было сделано для друга некоторое время назад ... по умолчанию он получает полный размер дерева подкаталогов.однако параметр переключателя -NoRecurse
даст ему только размер каждого вложенного каталога без каких-либо более глубоких изменений.
function Get-SubDirSize
{
[CmdletBinding ()]
Param (
[Parameter (
Position = 0
)]
[string]
$Path = $env:TEMP,
[Parameter ()]
[switch]
$NoRecurse
)
begin {}
process
{
$DirList = Get-ChildItem -LiteralPath $Path -Directory
foreach ($DL_Item in $DirList)
{
$GCI_Params = @{
LiteralPath = $DL_Item.FullName
Recurse = -not $NoRecurse
File = $True
Force = $True
ErrorAction = 'SilentlyContinue'
}
$FileList = Get-ChildItem @GCI_Params
if ($FileList.Count -gt 0)
{
$DirSize = [math]::Round(($FileList |
Measure-Object -Property Length -Sum).Sum / 1MB, 2)
}
else
{
$DirSize = 0
}
[PSCustomObject]@{
DirName = $DL_Item.FullName
FileCount = $FileList.Count
Size_MB = $DirSize
}
}
}
end {}
} # end >>> function Get-SubDirSize
, названный таким образом ...
Get-SubDirSize -Path $env:ProgramData -NoRecurse
... это дает следующее ...
DirName FileCount Size_MB
------- --------- -------
C:\ProgramData\Apple 0 0
C:\ProgramData\Apple Computer 0 0
C:\ProgramData\AVAST Software 0 0
C:\ProgramData\Binary Fortress Software 0 0
C:\ProgramData\chocolatey 5 6.48
C:\ProgramData\Git 1 0
C:\ProgramData\IsolatedStorage 0 0
C:\ProgramData\Last.fm 0 0
C:\ProgramData\LogiShrd 1 0
C:\ProgramData\Malwarebytes 0 0
C:\ProgramData\Microsoft 0 0
C:\ProgramData\MindGems 0 0
C:\ProgramData\Mozilla 0 0
C:\ProgramData\NCH Software 0 0
C:\ProgramData\Notepad++ 0 0
C:\ProgramData\Oracle 0 0
C:\ProgramData\Package Cache 0 0
C:\ProgramData\Samsung 0 0
C:\ProgramData\shimgen 0 0
C:\ProgramData\Synology 0 0