PowerShell · 12.07.2024

Мелочей здесь не бывает

Потребовалась мне тут примитивная следилка за размером папки, которая бы показывала динамику увеличения или уменьшения оного. Речь идёт исключительно о размере каталога в мегабайтах. Не о количестве файлов, не о процессах, копошащихся в директории, а только о размере.

Наколдовав пару функций, я сляпал вот такой скрипт:

[System.Console]::Title = "Размер директории в реальном времени"

# Вывод размера с меткой времени #
function GetPathSizeWithDate
{
    Param([Parameter(Mandatory=$true)]$PathToDirectory)
    $date = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    $size = "{0:n2}" -f ((Get-ChildItem -path $PathToDirectory -recurse | Measure-Object -property length -sum).sum/1mb)
    return "$date - $size МБ"
}

# Вывод размера без метки времени #
function GetPathSize
{
    Param([Parameter(Mandatory=$true)]$PathToDirectory)
    $date = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    $size = (Get-ChildItem -path $PathToDirectory -recurse | Measure-Object -property length -sum).sum/1mb
    return $size
}

$dir = Read-Host "Укажите путь к директории"
Clear
Write-Host "Начат мониторинг директории $dir..."
Write-Host (GetPathSizeWithDate -PathToDirectory $dir)
Write-Host
while($true)
{
    $pre = GetPathSize -PathToDirectory $dir
    Sleep(5)
    $now = GetPathSize -PathToDirectory $dir
    if ($pre -lt $now)
    { Write-Host (GetPathSizeWithDate -PathToDirectory $dir) "- Увеличение размера директории!" -ForegroundColor Red }
    if ($pre -gt $now)
    { Write-Host (GetPathSizeWithDate -PathToDirectory $dir) "- Уменьшение размера директории!" -ForegroundColor Green }
}

Скрипт спрашивает путь к папке, получает её текущий размер, ждёт пять секунд и снова получает размер. Если зафиксирован рост — появляется сообщение, помеченное красным. Если скрипт засёк уменьшение размера папки — сообщение будет зелёным. Фиксировать совсем малую динамику в папках никакого смысла нет — скрипт писался для мониторинга прироста/уменьшения начиная с 1 мегабайта.