Jak dokładnie uzyskać rozmiar określonego katalogu za pomocą PowerShell

PowerShell jest potężnym narzędziem automatyzacji dla systemu Windows i jest niezwykle przydatny w zarządzaniu systemem plików. Szczególnie, gdy chodzi o uzyskanie rozmiaru katalogu, oferuje znacznie bardziej szczegółowe i elastyczne informacje niż korzystanie z GUI. Ten artykuł przedstawia, jak uzyskać rozmiar katalogu za pomocą PowerShell, od używania podstawowych poleceń, konwersji jednostek rozmiaru, po uzyskanie całkowitego rozmiaru wraz z podkatalogami, krok po kroku.

Spis treści

Korzystanie z podstawowych poleceń

Najbardziej podstawowym sposobem na uzyskanie rozmiaru katalogu w PowerShell jest połączenie polecenia Get-ChildItem z poleceniem Measure-Object. Ta kombinacja pozwala obliczyć całkowity rozmiar plików w określonym katalogu.

Oto przykład polecenia do uzyskania rozmiaru określonego katalogu (tutaj „C:\ExampleDirectory”).

Get-ChildItem C:\ExampleDirectory -Recurse | Measure-Object -Property Length -Sum
  • Get-ChildItem C:\ExampleDirectory -Recurse: Wyświetla wszystkie elementy w określonym katalogu i jego podkatalogach.
  • Measure-Object -Property Length -Sum: Sumuje rozmiar (właściwość Length) wymienionych plików.

To polecenie zwraca całkowity rozmiar wszystkich plików w określonym katalogu w bajtach. Jednak ta metoda nie uwzględnia rozmiaru samego katalogu ani nie konwertuje jednostek rozmiaru. W następnej sekcji zostanie wyjaśnione, jak konwertować jednostki rozmiaru.

Konwersja jednostek rozmiaru

Rozmiar katalogu uzyskany w PowerShell domyślnie jest podawany w bajtach. Aby przekonwertować go na bardziej czytelny format, tak jak KB, MB lub GB, należy wykonać obliczenia. Poniższy skrypt pokazuje, jak automatycznie przekonwertować jednostki rozmiaru na najbardziej odpowiedni format i wyświetlić wartość.

# Uzyskiwanie rozmiaru określonego katalogu
$sizeBytes = (Get-ChildItem C:\ExampleDirectory -Recurse | Measure-Object -Property Length -Sum).Sum
# Funkcja do konwersji jednostek
function Convert-Size($bytes) {
    if ($bytes -gt 1GB) {
        "{0:N2} GB" -f ($bytes / 1GB)
    } elseif ($bytes -gt 1MB) {
        "{0:N2} MB" -f ($bytes / 1MB)
    } elseif ($bytes -gt 1KB) {
        "{0:N2} KB" -f ($bytes / 1KB)
    } else {
        "{0} Bajtów" -f $bytes
    }
}
# Wyświetlanie wyniku
$convertedSize = Convert-Size -bytes $sizeBytes
Write-Output "Całkowity rozmiar C:\ExampleDirectory to $convertedSize"

Ten skrypt najpierw używa Get-ChildItem i Measure-Object do uzyskania całkowitego rozmiaru katalogu w bajtach. Następnie przekazuje ten rozmiar do funkcji Convert-Size, aby przekonwertować go na czytelny jednostki. Ta funkcja określa, czy dany rozmiar jest najbardziej odpowiedni dla GB, MB czy KB, i formatuje rozmiar w tej jednostce. Na koniec wyświetlana jest wiadomość zawierająca przekonwertowany rozmiar.

Ta metoda pozwala uzyskać wyniki w formacie łatwym do zrozumienia, nawet dla dużych rozmiarów plików.

Uzyskiwanie całkowitego rozmiaru wraz z podkatalogami

Podczas używania PowerShell do uzyskania rozmiaru określonego katalogu, często ważne jest również obliczenie rozmiaru zawartych w nim podkatalogów. Ta całkowita kalkulacja rozmiaru może być pomocna w zarządzaniu magazynowaniem serwera lub organizowaniu danych. Poniższe kroki i fragment kodu pokazują, jak uzyskać całkowity rozmiar katalogu wraz z jego podkatalogami.

# Katalog docelowy
$directoryPath = "C:\ExampleDirectory";
# Obliczanie rozmiaru katalogu
$directorySize = Get-ChildItem $directoryPath -Recurse | Where-Object { -not $_.PSIsContainer } | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue
# Konwersja jednostek rozmiaru
function Convert-Size($bytes) {
    switch ($bytes) {
        { $_ -gt 1GB } { "{0:N2} GB" -f ($bytes / 1GB); break }
        { $_ -gt 1MB } { "{0:N2} MB" -f ($bytes / 1MB); break }
        { $_ -gt 1KB } { "{0:N2} KB" -f ($bytes / 1KB); break }
        Default { "$bytes Bajtów" }
    }
}
# Wyświetlanie wyniku
$convertedSize = Convert-Size -bytes $directorySize.Sum
Write-Output "Całkowity rozmiar $directoryPath to $convertedSize"

Ten skrypt najpierw używa polecenia Get-ChildItem, aby rekurencyjnie wylistować wszystkie pliki i podkatalogi w określonym katalogu. Następnie filtruje tylko pliki za pomocą polecenia Where-Object i oblicza ich całkowity rozmiar za pomocą Measure-Object. Parametr -ErrorAction SilentlyContinue jest używany, aby zapobiec zatrzymaniu skryptu, jeśli wystąpi błąd z powodu braku praw dostępu.

Następnie, wcześniej wspomniana funkcja Convert-Size jest używana do konwersji całkowitego rozmiaru uzyskanego w bajtach na bardziej czytelny format. W końcu ścieżka katalogu wraz z przekonwertowanym rozmiarem jest wyświetlana, jasno pokazując całkowity rozmiar.

Ta metoda ułatwia zrozumienie całkowitego rozmiaru katalogów zawierających duże zbiory danych lub liczne podkatalogi.

Obliczanie rozmiaru określonych typów plików

Obliczanie rozmiaru określonych typów plików może być pomocne w organizowaniu danych lub optymalizacji magazynowania. Na przykład pliki dziennika lub pliki obrazów mogą zajmować znaczną ilość miejsca, a znajomość rozmiaru tych plików może pomóc w rozważeniu usunięcia lub archiwizacji niepotrzebnych plików. Poniżej przedstawiono, jak używać PowerShell do obliczenia całkowitego rozmiaru określonych typów plików (np. plików „.log”).

# Katalog docelowy
$directoryPath = "C:\ExampleDirectory";
# Docelowy typ pliku
$fileExtension = "*.log";
# Obliczanie rozmiaru typu pliku
$fileSize = Get-ChildItem $directoryPath -Filter $fileExtension -Recurse | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue
# Funkcja konwersji rozmiaru
function Convert-Size($bytes) {
    switch ($bytes) {
        { $_ -gt 1GB } { "{0:N2} GB" -f ($bytes / 1GB); break }
        { $_ -gt 1MB } { "{0:N2} MB" -f ($bytes / 1MB); break }
        { $_ -gt 1KB } { "{0:N2} KB" -f ($bytes / 1KB); break }
        Default { "$bytes Bajtów" }
    }
}
# Wyświetlanie wyniku
$convertedSize = Convert-Size -bytes $fileSize.Sum
Write-Output "Całkowity rozmiar plików $fileExtension w $directoryPath to $convertedSize"

Ten kod używa polecenia Get-ChildItem, aby rekurencyjnie wyszukać pliki z określonym rozszerzeniem. Parametr -Filter zapewnia, że są targetowane tylko pliki określonego typu. Następnie, polecenie Measure-Object jest używane do obliczenia całkowitego rozmiaru tych plików, który jest następnie konwertowany na czytelną jednostkę przez wcześniej wspomnianą funkcję Convert-Size.

Ta metoda pozwala dokładnie zrozumieć, ile miejsca zajmuje określony typ pliku na magazynie, pomagając w decyzjach dotyczących zarządzania magazynem.

Zapisywanie wyników do pliku

Zapisywanie wyników analizy rozmiaru katalogu do pliku może być przydatne do generowania raportów lub przyszłych odniesień. Ta sekcja przedstawia, jak używać PowerShell do zapisywania informacji o uzyskanych rozmiarach katalogów do pliku tekstowego lub CSV. Ułatwia to wizualizację i udostępnianie danych.

Zapis do pliku tekstowego

# Katalog docelowy
$directoryPath = "C:\ExampleDirectory";
# Ścieżka pliku wynikowego
$outputFilePath = "C:\directorySizeReport.txt";
# Uzyskiwanie rozmiaru katalogu
$sizeBytes = (Get-ChildItem $directoryPath -Recurse | Measure-Object -Property Length -Sum).Sum
# Konwersja jednostek rozmiaru
$convertedSize = Convert-Size -bytes $sizeBytes
# Zapisywanie wyniku do pliku
"Całkowity rozmiar $directoryPath to $convertedSize" | Out-File $outputFilePath

Zapis do pliku CSV

Zapis do pliku CSV jest szczególnie przydatny, jeśli chcesz porównać rozmiary wielu katalogów. Poniższy przykład oblicza rozmiary wielu katalogów i zapisuje każdy wynik do pliku CSV.

# Lista katalogów docelowych
$directoryPaths = @("C:\ExampleDirectory", "D:\AnotherDirectory");
# Ścieżka pliku CSV wynikowego
$outputCsvPath = "C:\directorySizeReport.csv";
# Inicjalizacja tablicy wyników
$results = @()

foreach ($path in $directoryPaths) {
    $sizeBytes = (Get-ChildItem $path -Recurse | Measure-Object -Property Length -Sum).Sum
    $convertedSize = Convert-Size -bytes $sizeBytes
    $results += [PSCustomObject]@{
        "Katalog" = $path
        "Rozmiar" = $convertedSize
    }
}

# Zapisywanie wyników do CSV
$results | Export-Csv $outputCsvPath -NoTypeInformation

Te skrypty ułatwiają dokumentowanie i zapisywanie wyników analizy rozmiarów katalogów. Funkcjonalność zapisu do plików tekstowych lub CSV zwiększa przejrzystość zadań zarządzania i wspiera przyszłą analizę danych lub generowanie raportów.

Zastosowanie: Jak regularnie monitorować rozmiary katalogów za pomocą skryptów

Regularne monitorowanie rozmiaru katalogów jest ważne dla wczesnego wykrywania nagłych wzrostów danych i zapobiegania problemom z pojemnością magazynu. Łącząc skrypty PowerShell z zaplanowanymi zadaniami, ten proces można zautomatyzować. Poniżej przedstawiono, jak utworzyć skrypt, który regularnie monitoruje rozmiary katalogów i wydaje ostrzeżenie, jeśli przekroczony zostanie określony rozmiar.

Krok 1: Tworzenie skryptu PowerShell

Najpierw utwórz skrypt PowerShell, który sprawdza rozmiar katalogu i wydaje ostrzeżenie, jeśli przekroczy określony próg.

# Ustawienie katalogu docelowego i progu
$directoryPath = "C:\ExampleDirectory";
$thresholdSizeGB = 10

# Pobieranie rozmiaru katalogu i porównywanie go z progiem
$sizeBytes = (Get-ChildItem $directoryPath -Recurse | Measure-Object -Property Length -Sum).Sum
$sizeGB = $sizeBytes / 1GB

if ($sizeGB -gt $thresholdSizeGB) {
    Write-Warning "Ostrzeżenie: Rozmiar $directoryPath przekroczył próg $thresholdSizeGB GB. Aktualny rozmiar to $sizeGB GB.";
}

Krok 2: Dodawanie skryptu do zaplanowanych zadań

Następnie dodaj utworzony skrypt do zaplanowanych zadań Windows, aby uruchamiał się regularnie.

  1. Otwórz „Harmonogram Zadań” i wybierz „Utwórz Podstawowe Zadanie”.
  2. Nadaj zadaniu nazwę i opis.
  3. Ustaw wyzwalacz, decydując, jak często skrypt powinien być uruchamiany (np. codziennie, tygodniowo).
  4. W kroku „Akcja” wybierz „Uruchom program” i wskaż ścieżkę do skryptu PowerShell.
  5. Dostosuj inne ustawienia według potrzeb i zapisz zadanie.

W ten sposób automatycznie zostanie wydane ostrzeżenie, jeśli rozmiar określonego katalogu przekroczy ustawiony próg. Pomaga to w wczesnym wykryciu nagłych wzrostów danych lub nieoczekiwanych niedoborów pojemności i podjęciu odpowiednich działań.

Podsumowanie

Korzystając z PowerShell, można dokładnie zmierzyć rozmiar określonego katalogu i przeprowadzić zarządzanie magazynowaniem oraz monitorowanie na podstawie tych danych. Ten artykuł przedstawił szeroki zakres technik, od korzystania z podstawowych poleceń, konwersji jednostek rozmiaru, obliczania całkowitego rozmiaru wraz z podkatalogami, obliczania rozmiaru określonych typów plików, zapisywania wyników do pliku, po regularne monitorowanie rozmiarów katalogów za pomocą skryptów. Poprzez odpowiednie połączenie tych metod można osiągnąć bardziej efektywne zarządzanie danymi. PowerShell ponownie potwierdził się jako potężne narzędzie do rozwiązywania wyzwań związanych ze wzrostem danych.

Spis treści