PowerShell скрипт – подсчет размера файлов и папок и экспорт в CSV

Эта публикации будет служить скорее моей шпаргалкой 🙂 В статья приведу PowerShell скрипт, который осуществляет подсчет размера файлов и папок и экспортирует полученный результат в файл CSV.

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

Понятно, что скрипт прост до безобразия, но может кому-то он уже послужит готовым решением. Или его слегка можно будет адаптировать под ваши нужды.

Назначение скрипта

Собственно, что делает скрипт. Он принимает два параметра:

  1. FolderPath – путь до директории, для которой необходимо выполнить оценку размера всех подпапок и файлов.
  2. ExportCsvPath – путь до экспортируемого CSV файла.

После завершения выполнения будет сформирован итоговый CSV файл с метаинформацией.

Тело скрипта

Ниже я приведу тело скрипта.

Готовый файл:

Или ссылка на GitHub.

Тело скрипта:

param (
    [Parameter(Mandatory=$true)]
    [string]$FolderPath,

    [Parameter(Mandatory=$true)]
    [string]$ExportCsvPath
)

New-Item -Path $ExportCsvPath -Force -ItemType File -Value '' | Out-Null
Add-Content -Path $ExportCsvPath -Value 'Root Folder;;Folder;;Size (bytes);;Total Objects;;Folders Count;;Files Count;;Type;;Notes'

$items = Get-ChildItem -Path $FolderPath

foreach($item in $items){
    $path = $FolderPath + $item

    $size = 0
    $foldersCount = 0
    $filesCount = 0
    $totalObjectCount = 0
    $notes = ''

    try
    {
       if ((Get-Item $path) -is [System.IO.DirectoryInfo]){
            $foldersCount = (Get-ChildItem -Recurse -Path $path -Directory -ErrorAction SilentlyContinue | Measure-Object).Count 
            $filesCount = (Get-ChildItem -Recurse -Path $path -File -ErrorAction SilentlyContinue | Measure-Object).Count
            $totalObjectCount = $foldersCount + $filesCount

            if ($filesCount -gt 0){
                $size = (Get-ChildItem -Path $path -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum -ErrorAction Stop).Sum   
            }

            $valueToAdd = $FolderPath + ";;"  + $item + ";;" + $size + ";;" + $totalObjectCount + ";;" + $foldersCount + ";;" + $filesCount + ";;" + "Directory" + ";;" + $notes
            Add-Content -Path $ExportCsvPath -Value $valueToAdd 
       } else {
            $size = (Get-ChildItem -Path $path -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum -ErrorAction Stop).Sum
            $valueToAdd = $FolderPath + ";;"  + $item + ";;" + $size + ";;" + $totalObjectCount + ";;" + $foldersCount + ";;" + $filesCount + ";;" + "File" + ";;" + $notes
            Add-Content -Path $ExportCsvPath -Value $valueToAdd
       }
         
    }

    catch
    {
        $notes = "Failed to process item: " + $item
    }   

}

Пример использования

Пример запуска скрипта:

.\Get-FoldersAndFilesSize.ps1 -FolderPath C:\Profiles\ -ExportCsvPath C:\tmp\file.csv

Пример итогового CSV файла:

Root Folder;;Folder;;Size (bytes);;Total Objects;;Folders Count;;Files Count;;Type;;Notes
C:\Profiles\;;LargeFiles9_2022-02-07_00-21-43_files;;18753;;4;;0;;4;;Directory;;
C:\Profiles\;;LeastRecentlyAccessed11_2022-02-11_03-50-54_files;;7649;;2;;0;;2;;Directory;;
C:\Profiles\;;New folder;;0;;1;;1;;0;;Directory;;
C:\Profiles\;;New folder (2);;763;;9;;6;;3;;Directory;;
C:\Profiles\;;New folder (3);;0;;2;;1;;1;;Directory;;
C:\Profiles\;;QuotaUsage10_2022-02-09_08-28-34_files;;7649;;2;;0;;2;;Directory;;
C:\Profiles\;;QuotaUsage2_2022-02-03_21-53-44_files;;7649;;2;;0;;2;;Directory;;
C:\Profiles\;;u2;;99116343;;94;;47;;47;;Directory;;
C:\Profiles\;;u3;;384289;;102;;50;;52;;Directory;;
C:\Profiles\;;u4;;382828;;84;;42;;42;;Directory;;
C:\Profiles\;;LargeFiles9_2022-02-07_00-21-43.html;;8367;;0;;0;;0;;File;;
C:\Profiles\;;LeastRecentlyAccessed11_2022-02-11_03-50-54.html;;6904;;0;;0;;0;;File;;
C:\Profiles\;;New Text Document.txt;;0;;0;;0;;0;;File;;
C:\Profiles\;;QuotaUsage10_2022-02-09_08-28-34.html;;7974;;0;;0;;0;;File;;
C:\Profiles\;;QuotaUsage2_2022-02-03_21-53-44.html;;4899;;0;;0;;0;;File;;

В последующем итоговый CSV файл можно, например, импортировать в Excel и получить возможность фильтровать данные или проводить какой-то анализ данных:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *