如何使用PowerShell查找计算机上的大文件

时间:2020-01-09 10:46:24  来源:igfitidea点击:

当系统警告我们本地驱动器上的可用空间即将用完时,管理员首先要做的是查找占用大量空间的所有大文件。要搜索新文件,可以使用Windows资源管理器(有几个预定义的按大小搜索的模板)、我们最喜欢的文件管理器或者第三方工具。但是,与PowerShell不同,所有这些工具都需要安装。让我们考虑使用PowerShell在本地计算机驱动器上快速搜索大型文件的示例。

我们可以使用Get-ChildItem
cmdlet列出特定目录(包括子文件夹)中的文件及其尺寸。这个cmdlet可以在整个磁盘或者特定文件夹(例如,用户配置文件和任何其他文件夹)中搜索文件。

让我们列出磁盘C:\上最大的10个文件:

Get-ChildItem c:\ -r| sort -descending -property length | select -first 10 name, Length

根据磁盘大小和其中的文件数,完成该命令可能需要一些时间。

–r(Recurse)键表示将递归搜索所有子文件夹。我们可以使用 –depth参数 将检查限制在某个深度级别。如果不指定路径,则搜索当前目录下的所有子文件夹。

如我们所见,我们得到了磁盘上按降序排列的10个最大文件的列表。

提示。即使使用管理员权限访问某些目录时,Get-ChildItem cmdlet也可能返回拒绝访问错误:

Get-ChildItem : Access to the path 'C:\Windows\CSC' is denied.
At line:1 char:1
+ Get-ChildItem c:\ -r| sort -descending -property length | select -fir ...
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (C:\Windows\CSC:String) [Get-ChildItem**, UnauthorizedAccessException
+ FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

要消除此类错误,请使用 -ErrorAction SilentlyContinue参数

使用 -Force选项显示用户无法访问的隐藏文件和系统文件。

如我们所见,文件大小以字节为单位显示。为了方便起见,它们可以转换成兆字节。还可以显示存储找到的文件的文件夹:

Get-ChildItem c:\ -r -ErrorAction SilentlyContinue –Force |sort -descending -property length | select -first 10 name, DirectoryName, @{Name="MB";Expression={[Math**::round($_.length / 1MB, 2)}}

可以使用Out-GridViewcmdlet将生成的表转换为方便的图形表:

Get-ChildItem c:\ -r|sort -descending -property length | select -first 10 name, DirectoryName, @{Name="MB";Expression={[Math**::round($_.length / 1MB, 2)}} | Out-GridView

类似地,我们可以找到大于某个大小(例如500 MB)的所有文件:

$size=500*1024*1024
GCi C:\ -recurse -ErrorAction SilentlyContinue –Force | where-object {$_.length -gt $size} | Sort-Object length | ft fullname

我们可以将文件列表导出到CSV文件中,如下所示:

GCi C:\ -recurse | where-object {$_.length -gt $size} | Sort-Object length | ft fullname | Export-Csv c:\pc\LargeFiles_Report.csv