powershell - 有没有更快的方法来获取从 powershell 中的特定目录开始的磁盘使用情况?

标签 powershell disk disk-access

我一直在使用以下代码来获取从特定目录开始的磁盘使用情况:

$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 进行计算。所以你等待了一段时间却没有任何进展。

PowerShell processes a ForEachObject cmdlet, it processes each value as it passes through the pipeline, so it uses less memory at any given time.

您可以做的是使用 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/

相关文章:

Powershell 日志记录错误

sql-server - 匿名用户执行的远程Powershell脚本

c - 如何直接从磁盘复制锁定的文件并确保文件完好无损?

apache-kafka - Apache 卡夫卡 : reduce kafka disk usage

mysql - 最好使用 : mysql column or file check to detect image?

Powershell 脚本命令持久化

powershell - PowerShell-如何判断两个对象是否相同

algorithm - 最佳填充 DVD 以进行刻录的算法是什么

c++ - 将原始数据 "signature"写入磁盘而不损坏文件系统

linux - 在 Linux 中检测配额的 block 大小