вот один из способов сделать это.он создает [PSCustomObject]
, который содержит данные из различных деревьев каталогов, и выводит их в коллекцию $Results
, которая отображается на экране и сохраняется в файле CSV.
# fake reading in a list of dirs
# in real life, use Get-Content
$DirList = @'
C:\Temp\Logitech
C:\Temp\BackupSets - Copy
C:\Temp\chocolatey
C:\Temp\zzz - Copy
'@ -split [System.Environment]::NewLine
$Results = foreach ($DL_Item in $DirList)
{
$SubDirList = Get-ChildItem -LiteralPath $DL_Item -Directory
foreach ($SDL_Item in $SubDirList)
{
$DirTreeInfo = Get-ChildItem -LiteralPath $SDL_Item.FullName -Recurse -File
$Size_MB = [math]::Round(($DirTreeInfo |
Measure-Object -Property Length -Sum).Sum / 1MB, 2)
[PSCustomObject]@{
DirName = $SDL_Item.FullName
FileCount = $DirTreeInfo.Count
Size_MB = $Size_MB
}
}
}
# on screen
$Results
# send to CSV
$Results |
Export-Csv -LiteralPath "$env:TEMP\TomMaleski_-_DirTreeSizeList.csv" -NoTypeInformation
усеченный вывод на экран ...
DirName FileCount Size_MB
------- --------- -------
C:\Temp\Logitech\Logitech_Gaming_Software_1 126 1.09
C:\Temp\BackupSets - Copy\2019-05-19 2 0
C:\Temp\BackupSets - Copy\2019-05-20 2 0
C:\Temp\chocolatey\ConEmu 1 6.85
[*...snip...*]
C:\Temp\zzz - Copy\test 4.poiu 0 0
C:\Temp\zzz - Copy\TestingStuff 40 66.16
C:\Temp\zzz - Copy\TestingStuff - Copy 40 66.16
C:\Temp\zzz - Copy\Users 35 66.16
C:\Temp\zzz - Copy\Users - Copy 35 66.16
усеченное содержимое файла CSV ...
"DirName","FileCount","Size_MB"
"C:\Temp\Logitech\Logitech_Gaming_Software_1","126","1.09"
"C:\Temp\BackupSets - Copy\2019-05-19","2","0"
"C:\Temp\BackupSets - Copy\2019-05-20","2","0"
"C:\Temp\chocolatey\ConEmu","1","6.85"
[*...snip...*]
"C:\Temp\zzz - Copy\test 4.poiu","0","0"
"C:\Temp\zzz - Copy\TestingStuff","40","66.16"
"C:\Temp\zzz - Copy\TestingStuff - Copy","40","66.16"
"C:\Temp\zzz - Copy\Users","35","66.16"
"C:\Temp\zzz - Copy\Users - Copy","35","66.16"