【问题标题】:Query a bigger file server for files and folders with get-childitem使用 get-childitem 查询更大的文件服务器以获取文件和文件夹
【发布时间】:2021-11-07 01:39:40
【问题描述】:

我有一个超过 15 TB 的文件和文件夹的大型文件服务器,我需要通过 get-childitem 获取所有全名,我正在这样做:

$FSData = Get-ChildItem -Path C:\FS01 -Filter * -Recurse -Force

但是服务器消耗的内存是16GB,不知道有没有什么方法可以查询并保存到CSV而无需等待cmdlet完成内存转储。

【问题讨论】:

  • 您可以使用robocopy 及其选项/L 创建所有文件的列表。它可能更快。 ;-)

标签: windows powershell get-childitem fileserver


【解决方案1】:

我建议使用 StreamWriter,它只会打开文件一次并缓冲输入。它设法在大约 1 分 15 秒内记录了我的 C:\ 驱动器中的所有文件名(925,232 个文件)

$sw = [System.IO.StreamWriter]::new('c:\temp\filelist.log');
$options = [System.IO.EnumerationOptions]::new()
$options.RecurseSubdirectories = $true
$options.AttributesToSkip = 0
[System.IO.Directory]::EnumerateFileSystemEntries('C:\FS01', '*', $options).ForEach( { $sw.WriteLine($_) }); 
$sw.Dispose()

注意 EnumerateFileSystemEntries() 返回文件和目录。如果你只想要文件使用[System.IO.Directory]::EnumerateFiles('C:\FS01', '*', $options)

【讨论】:

  • 嘿丹尼尔,谢谢你的帮助!!!我之前需要加载一些程序集!?
  • 所有这些命令都可以在 PowerShell 中立即运行。我们正在利用已经存在的 .NET 的力量。没有更多可加载的
  • 您好 Daniel,很抱歉可能会延迟回复...我收到此消息:ibb.co/mNF5J5h 我运行 Windows Server 2019、.Net Runtime 4.8 和 PowerShell 5.1
  • Hello Daniel... 昨天我用 PowerShell v7 运行脚本并且做得很好...但是当输出有 5 000 000 行时,该过程完成,也许是 1/3我的文件服务器(总共有 16TB)...有什么建议!?
  • 行数将是文件数量的总和,而不是所有文件大小的总和,即 16TB。您能否运行dir c:\FS01 -File -Recurse | Measure-Object 并检查Count 属性显示的内容?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 2019-08-26
相关资源
最近更新 更多