You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

超15TB文件服务器使用Get-ChildItem查询内存过高如何导出CSV

大文件系统Get-ChildItem内存过高的流式写入解决方案

你当前使用的命令会将所有遍历到的文件/文件夹对象全部存储到$FSData变量中,15TB数据对应的元数据总量远超过16GB内存的承载上限,自然会出现内存占用过高的问题。

核心解决方案:使用管道流式处理

PowerShell的管道支持逐对象传递处理,无需等待全部遍历完成再写入文件,每获取到一个文件/文件夹对象就直接写入磁盘,全程内存占用可稳定在几十MB级别。

基础流式写入CSV命令

如果你需要保留文件/文件夹的核心属性(路径、类型、大小、修改时间等),直接使用以下命令即可:

Get-ChildItem -Path C:\FS01 -Recurse -Force -ErrorAction SilentlyContinue | 
Select-Object FullName, PSIsContainer, Length, LastWriteTime | 
Export-Csv -Path "C:\FS01_File_List.csv" -NoTypeInformation -Encoding UTF8

说明:-ErrorAction SilentlyContinue参数用于跳过无权限访问的路径,避免遍历中断,不需要可以直接删除。

仅需要完整路径的精简方案

如果只需要导出所有文件和文件夹的完整路径,不需要额外属性,可以使用更轻量的写入方式,内存占用更低:

Get-ChildItem -Path C:\FS01 -Recurse -Force -ErrorAction SilentlyContinue | 
Select-Object -ExpandProperty FullName | 
Out-File -Path "C:\FS01_Full_Path_List.txt" -Encoding UTF8

低版本PowerShell兼容方案

如果服务器运行的是PowerShell 5.0以下的旧版本,Export-Csv仍可能出现内存堆积的情况,可以改用手动逐行追加写入的方式:

# 先写入CSV表头
"FullPath" | Out-File -Path "C:\FS01_Path_List.csv" -Encoding UTF8
# 逐行追加路径
Get-ChildItem -Path C:\FS01 -Recurse -Force -ErrorAction SilentlyContinue | ForEach-Object {
    "`"$($_.FullName)`"" | Out-File -Path "C:\FS01_Path_List.csv" -Encoding UTF8 -Append
}

该方案兼容性最强,内存占用最低,仅遍历速度会略低于原生管道流式处理,完全适配15TB级别的文件系统遍历场景。

内容的提问来源于stack exchange,提问作者Jimcesseg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:36:04