Эта публикации будет служить скорее моей шпаргалкой 🙂 В статья приведу PowerShell скрипт, который осуществляет подсчет размера файлов и папок и экспортирует полученный результат в файл CSV.
Многовероятно, что в последующем какие-то часто используемые скрипты я также буду выкладывать в виде кратких публикаций и пояснений к ним.
Понятно, что скрипт прост до безобразия, но может кому-то он уже послужит готовым решением. Или его слегка можно будет адаптировать под ваши нужды.
Назначение скрипта
Собственно, что делает скрипт. Он принимает два параметра:
- FolderPath – путь до директории, для которой необходимо выполнить оценку размера всех подпапок и файлов.
- ExportCsvPath – путь до экспортируемого CSV файла.
После завершения выполнения будет сформирован итоговый CSV файл с метаинформацией.
Тело скрипта
Ниже я приведу тело скрипта.
Готовый файл:
Тело скрипта:
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 и получить возможность фильтровать данные или проводить какой-то анализ данных: