首页 > 解决方案 > Get-ChildItem 高内存使用

问题描述

我想扫描一些包含数百万个文件的大型目录,以递归方式使用二级目录名称、大小和文件数进行摘要。我让代码运行了几个小时,但由于 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
}

标签: powershellmemoryget-childitem

解决方案


看看这是否更好

$mailboxes = Get-ChildItem E:\data -Directory | Get-ChildItem -Directory
$OutputPath = 'D:\scripts\summary.csv'

foreach($line in $mailboxes) {

$files = Get-ChildItem $line.FullName -File -Recurse -Filter *.eml
$size = $files | Measure-Object Length -Sum | select -ExpandProperty Sum


[pscustomobject]@{MailBoxPath = $line.FullName;MailBox = $line.BaseName;FileSize = $size;FileCount = $files.count} | Export-Csv -Path $OutputPath -NoTypeInformation -Append
}

推荐阅读