Jak znaleźć duże pliki na dysku za pomocą PowerShell

Gdy system powiadomi Cię, że na dysku zabrakło wolnego miejsca, pierwszą rzeczą, którą robi administrator, jest próba znalezienia wszystkich dużych plików, które zajmują najwięcej miejsca. Za pomocą Eksploratora Windows można wyszukiwać duże pliki (istnieje kilka predefiniowanych szablonów wyszukiwania według rozmiaru), ulubionego menedżera plików lub narzędzi innych firm. Jednak wszystkie te narzędzia, w przeciwieństwie do programu PowerShell, wymagają instalacji na komputerze. Spójrzmy na przykład szybkiego znajdowania dużych plików na dysku za pomocą PowerShell.

Za pomocą polecenia cmdlet można uzyskać listę plików w określonym katalogu (w tym podfolderów) i ich rozmiary Get-childitem. Polecenie cmdlet może wyszukiwać pliki na całym dysku lub w określonym folderze (na przykład w profilach użytkowników lub w innych folderach).

Wymień 10 największych plików na C: \:

Get-ChildItem c: \ -r | sortuj-malejąco-długość nieruchomości | wybierz -pierwsze 10 imię, długość

W zależności od rozmiaru dysku i liczby plików na nim polecenie może trochę potrwać.

Klucz -r (Recurse) wskazuje, że konieczne jest rekurencyjne przechodzenie przez wszystkie zagnieżdżone obiekty (katalogi). Możesz ograniczyć sprawdzanie do pewnego poziomu zagnieżdżenia za pomocą parametru -Głębokość.

Jeśli nie podasz ścieżki, wyszukiwanie zostanie przeprowadzone we wszystkich podkatalogach w bieżącym katalogu.

Jak widać, mamy listę dziesięciu największych plików na dysku, posortowaną według malejącego rozmiaru pliku.

Wskazówka. Podczas uzyskiwania dostępu do niektórych katalogów, nawet z uprawnieniami administratora, polecenie cmdlet może zwrócić błąd dostępu:

Get-ChildItem: Odmowa dostępu na ścieżce „C: \ Windows \ CSC”.
wiersz: 1 znak: 1
+ Get-ChildItem c: \ -r | sort -descending -property length | wybierz -firs ...
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: PermissionDenied: (C: \ Windows \ CSC: String) [Get-ChildItem], UnauthorizedAccessException
+ FullyQualifiedErrorId: DirUnauthorizedAccessError, Microsoft.PowerShell.Commands.GetChildItemCommand

Aby ukryć pojawienie się takich błędów, użyj parametru -ErrorAction SilentlyContinue.

Jak widać, rozmiar pliku jest wyświetlany w bajtach. Dla wygody można je przekonwertować na megabajty. Ponadto możesz wyświetlić katalog, w którym znajduje się znaleziony plik:

Get-ChildItem c: \ -r -ErrorAction SilentlyContinue | sort -descending -property length | wybierz -pierwsze 10 nazw, DirectoryName, @ Name = "Mb"; Expression = [Math] :: round ($ _. length / 1MB, 2)

Otrzymaną etykietę można przekonwertować na wygodną formę graficzną za pomocą polecenia cmdlet Out-GridView:

Get-ChildItem c: \ -r | sort -descending -property length | wybierz -pierwsze 10 nazwa, nazwa katalogu, @ nazwa = "Mb"; wyrażenie = [matematyka] :: okrągły ($ _. długość / 1 MB, 2) | Widok poza siatką

Podobnie można znaleźć wszystkie pliki, które są większe niż pewna wartość, na przykład 200 MB):

Rozmiar $ = 200 * 1024 * 1024
GCi C: \ -recurse -ErrorAction SilentlyContinue | gdzie-obiekt $ _. długość -gt $ rozmiar | Sortuj długość obiektu | ft pełna nazwa

Listę plików można przesłać do pliku CSV w następujący sposób:

GCi C: \ -recurse | gdzie-obiekt $ _. długość -gt $ rozmiar | Sortuj długość obiektu | ft pełna nazwa | Export-Csv c: \ pc \ LargeFiles_Report.csv

Jeśli chcesz obliczyć rozmiar wszystkich plików w katalogu, skorzystaj z artykułu: Jak określić rozmiar katalogu za pomocą programu PowerShell.