获取目录总大小的PowerShell脚本

Jed*_*oky 17 windows sysadmin filesystems powershell scripting

我需要递归地获取目录的大小.我必须每个月都这样做,所以我想制作一个PowerShell脚本来完成它.

我该怎么做?

Jar*_*Par 23

请尝试以下方法

function Get-DirectorySize() {
  param ([string]$root = $(resolve-path .))
  gci -re $root |
    ?{ -not $_.PSIsContainer } | 
    measure-object -sum -property Length
}
Run Code Online (Sandbox Code Playgroud)

这实际上会产生一些摘要对象,其中包括项目数.你可以抓住Sum属性,这将是长度的总和

$sum = (Get-DirectorySize "Some\File\Path").Sum
Run Code Online (Sandbox Code Playgroud)

编辑为什么这样做?

让我们通过管道的组件来分解它.该gci -re $root命令将$root递归地从起始目录获取所有项目,然后将它们推送到管道中.因此,$rootwill 下的每个文件和目录都会传递第二个表达式?{ -not $_.PSIsContainer }.传递给此表达式的每个文件/目录都可以通过变量访问$_.前面的?表示这是一个过滤表达式,意味着只保留满足此条件的管道中的值.PSIsContainer方法将为目录返回true.所以实际上过滤器表达式只保留文件值.最终的cmdlet度量对象将对管道中剩余的所有值的属性Length的值求和.所以它实际上是为当前目录下的所有文件调用Fileinfo.Length(递归)并对值进行求和.

  • 尼斯.(Get-DirectorySize"Some\File\Path").Sum/1mb或(Get-DirectorySize"Some\File\Path").Sum/1gb转换为megs或gigs. (5认同)