【发布时间】:2019-11-13 09:41:44
【问题描述】:
我想扫描一些包含数百万个文件的大型目录,以递归方式使用 2 级目录名称、大小和每个文件中的文件数进行摘要。我让代码运行了几个小时,但由于 PowerShell 消耗 13GB 内存,它卡在了中间的某个地方。知道为什么内存使用率如此之高吗?
$mailboxes = Get-ChildItem E:\data -Directory |
Get-ChildItem -Directory |
Select -ExpandProperty FullName
foreach ($line in $mailboxes) {
$s = $line.split("\\")
$files = Get-ChildItem $line -File -Recurse -Include *.eml
$mailbox_path = $line
$mailbox = $s[-1]
$size = $files | Measure-Object Length -Sum | select -ExpandProperty Sum
$count = $files.Count
"$mailbox_path`t$mailbox`t$size`t$count" |
Out-File 'D:\scripts\summary.txt' -Append
}
【问题讨论】:
-
内存使用量是随着脚本的运行而逐渐增加,还是只是在中间才上升?
-
将
-Include *.eml替换为-Filter *.eml和/或仅收集变量$files($files = Get-ChildItem ... | Select-Object -Expand Length) 中的文件大小是否有帮助?
标签: powershell memory get-childitem