powershell - 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
}
解决方案
看看这是否更好
$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
}
推荐阅读
- c# - 从字符串数组创建一个更大的字符串
- selenium - 在命令行中将选项传递给 chrome 驱动程序 selenium
- ng-bootstrap - 登录后如何关闭 ng-bootstrap 模式?
- linux - 如何使用shell脚本和sed删除文本文件中字符串的后缀?
- linux - 将文件下载到 AWS S3 存储桶
- python - 将新列添加到熊猫数据框的有效方法
- c++ - 在命名空间 c++ 中正确声明外部变量
- c# - IN 子句中连接字符串的 SQL 注入预防
- javascript - 从画布复制到画布时图像模糊
- java - 在具有 Java 8 的嵌入式 Tomcat 8.5 上启用 TLS 握手的可观察性(日志记录/指标)