我一直在使用以下代码来获取从特定目录开始的磁盘使用情况:
$usage = (Get-ChildItem $webRoot -recurse | Measure-Object -property length -sum)
$diskUsage = $usage.sum
问题是,与简单地右键单击 Windows 中的目录并查看属性相比,这需要非常长的时间。
我们是否可以访问资源管理器用于获取磁盘使用情况的功能?或者是否有其他方法比我一直使用的方法更快?
我也不确定如果我的 PS 代码正在搜索的区域中有循环链接会发生什么。我认为它可能会锁定。
最佳答案
即使您右键单击并查看属性资源管理器仍然必须计算大小,这就是我的网络驱动器上发生的情况。这需要一段时间,因为有 1,000,000 多个文件和 500,000 多个目录。
使用您提供的命令,它首先获取所有文件和文件夹并将它们存储到内存中。仅仅执行 $files = gci $path -r
就需要很长时间,因为文件太多了。然后,您的命令将大内存块传递给 Measure-Object
。最后,Measure
进行计算。所以你等待了一段时间却没有任何进展。
您可以做的是使用 Foreach-Object %
循环来处理大小,并让它输出已经计算出的值。将文本打印到屏幕上总是会减慢速度,但至少您可以看到进展。删除cls; “总计:$($total/1GB)GB”
以提高效率。
gci $path -file -r | % {$total += $_.length; cls; "Total: $($total/1GB)GB"}
对您的命令和作为答案给出的其他命令运行 Measure-Command
,看看哪一个最快。
关于powershell - 有没有更快的方法来获取从 powershell 中的特定目录开始的磁盘使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15765716/