Windows PowerShell Trick - Instantly Find Large Files
To instantly find large files on a Windows system using PowerShell, you can leverage the Get-ChildItem
cmdlet with specific parameters. This method is efficient and does not require third-party tools, making it a powerful built-in solution for identifying large files across directories or entire drives. Below is a detailed explanation of how to use this trick step by step.
Step 1: Understanding the Command
The core command to find large files in PowerShell is:
Get-ChildItem -Path C:\ -Recurse -Force | Sort-Object -Property Length -Descending | Select-Object -First 10 FullName, Length
This command retrieves all files from the specified directory (and its subdirectories), sorts them by size in descending order, and selects the top 10 largest files. Let’s break it down:
Get-ChildItem
: This cmdlet lists items (files and directories) in a specified location.-Path C:\
: Specifies the root directory of the C: drive as the starting point for the search.-Recurse
: Ensures that all subdirectories are included in the search.-Force
: Includes hidden and system files that are normally excluded.
Sort-Object
:-Property Length
: Sorts items based on their size (file length).-Descending
: Ensures that larger files appear first.
Select-Object
:-First 10
: Limits the output to only the top 10 largest files.FullName, Length
: Displays each file’s full path and size (in bytes).
Step 2: Suppressing Errors
When running this command, you might encounter “Access Denied” errors for certain system-protected folders. To suppress these errors without interrupting execution, add the -ErrorAction SilentlyContinue
parameter:
Get-ChildItem -Path C:\ -Recurse -Force -ErrorAction SilentlyContinue | Sort-Object -Property Length -Descending | Select-Object -First 10 FullName, Length
This ensures that inaccessible directories do not disrupt your search process.
Step 3: Converting File Sizes
By default, file sizes are displayed in bytes. To make them more readable (e.g., in gigabytes), you can modify the command using calculated properties:
Get-ChildItem -Path C:\ -Recurse -Force -ErrorAction SilentlyContinue |
Sort-Object -Property Length -Descending |
Select-Object -First 10 Name, DirectoryName, @{Name="SizeGB";Expression={[Math]::Round($_.Length / 1GB, 2)}}
Here:
- The calculated property (
@{Name="SizeGB";Expression={...}}
) converts file sizes from bytes to gigabytes. - The
[Math]::Round()
function rounds values to two decimal places for clarity.
Step 4: Exporting Results
If you want to save the results for further analysis or sharing, export them to a CSV file:
Get-ChildItem C:\ -Recurse -Force -ErrorAction SilentlyContinue |
Where-Object {$_.Length -gt 10GB} |
Sort-Object Length |
Select FullName, @{Name="SizeGB";Expression={[Math]::Round($_.Length / 1GB, 2)}} |
Export-Csv C:\LargeFilesReport.csv –NoTypeInformation
This command filters out files smaller than 10 GB (Where-Object {$_.Length –gt 10GB}
) and exports details about larger files into a CSV file named “LargeFilesReport.csv” located at C:\
.
Step 5: Searching Specific File Types
To narrow your search to specific file types or exclude certain extensions:
- Use
–Include
to specify desired file types:Get-ChildItem C:\Users\YourUser\Documents\*.* –Include *.mp4,*.mkv –Recurse –Force | Sort Length –Descending | Select FullName –First 10
- Use
–Exclude
to omit unwanted extensions:Get-ChildItem D:\Media\*.* –Exclude *.tmp,*.log –Recurse –Force | Sort Length –Descending | Select FullName –First 10
Step 6: Using Out-GridView for Interactive Results
For an interactive graphical interface where you can filter and sort results manually:
Get-ChildItem C:\Users\YourUser\Downloads\*.* –Recurse –Force |
Sort Length –Descending |
Select Name, DirectoryName, @{Name="SizeMB";Expression={[Math]::Round($_.Length / 1MB,2)}} |
Out-GridView
The Out-GridView
cmdlet displays results in a user-friendly table format with filtering options.
Step 7: Finding Large Files on Remote Computers
PowerShell also allows searching for large files on remote systems via UNC paths or remote sessions:
- Using UNC paths:
Get-ChildItem \\RemotePC\C$ –Recurse –Force | Where {$_.Length –gt 5GB} | Sort Length –Descending | Select Name, DirectoryName, @{Name="SizeGB";Expression={[Math]::Round($_.Length /1GB ,2)}}
- Using Invoke-Command for multiple computers:
$ComputerList = @("Server01", "Server02") Invoke-Command –ComputerName $ComputerList { Get-ChildItem C:\*.* –Recurse | Sort Length –Descending | Select Name, @{Label='SizeMB'; Expression={$_.Length/1MB}} }
Conclusion
Using Windows PowerShell commands like Get-ChildItem
, combined with sorting and filtering techniques (Sort
, Where
, etc.), provides an efficient way to locate large files on local or remote systems without additional software installation.