Список каталогов сценариев PowerShell на глубину и обеспечивает размер - PullRequest
0 голосов
/ 26 июня 2019

Моя структура папок:

P:\12345
P:\12345\001
P:\12345\001\folder
P:\12345\002
P:\12345\002\folder
P:\67890
P:\67890\001
P:\67890\002

и т. Д.

Моя конечная цель - создать один скрипт, который предоставит мне CSV-путь к второму уровню и предоставит размерна этом уровне и ниже.В настоящее время у меня это работает в двух разных сценариях.

Вывод:

P:\12345\001; 1003
P:\12345\002; 631
P:\67890\001; 594
P:\67890\002; 467

Можно ли это сделать одним скриптом?

$startFolder = "P:\01520"
$output = "c:\temp\01520.csv"

$colItems = (Get-ChildItem $startFolder | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object)
$results = @()
foreach ($i in $colItems)
    {
        $i.FullName
        $subFolderItems = (Get-ChildItem $i.FullName -recurse | Measure-Object -property length -sum)
        $results += '"' +$i.FullName + '"' + ";" + "{0:N2}" -f ($subFolderItems.sum / 1MB)
    }
$results > $output

============================

Get-ChildItem \*\* | % { if ($_.Attributes -eq "Directory") { Out-File C:\Temp\DirList.txt -append -inputobject $_.FullName } }

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Один вкладыш с псевдонимами:

gci P:\*\* -Directory | %{"{0}; {1}" -f $_.FullName,(gci $_ -File -Recurse|measure Length -sum).Sum}

Пример вывода моей папки Q:\Test\*

Q:\Test\2015; 14977618
Q:\Test\2016; 6847244
Q:\Test\2017; 40056457
Q:\Test\2018; 405594085
Q:\Test\2019; 1551213
0 голосов
/ 26 июня 2019

вот один из способов сделать это.он создает [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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...