如何使用 Powershell 遍历非常大的目录树?

如何使用 Powershell 遍历非常大的目录树?

因此,我最近因 ReFS 强制完整性流而丢失了一个 400GB 的 VHDX 映像(有关问题的详细信息如何关闭 ReFS“强制”文件完整性?)。

所以现在我试图禁用所有其他更重要的文件上的强制选项。数百万个文件,通过深层目录结构,通常超过完整路径名 256 个字符的“限制”。

但是“天真的”解决方案Get-ChildItem -Path "X:\" -Recurse | Set-FileIntegrity -Enforce $False抛出了ScriptCallDepthException

我搜索过的所有地方,甚至微软自己的博客和文档,都建议使用这个Get-ChildItem -Recurse命令。但在这种情况下,它毫无用处。

那么该怎么办呢?

答案1

如果达到此限制,您可能不会使用 Powershell V3。

尝试使用带有堆栈的“trampoline”方法。下面的脚本仅打印文件名,因此请根据您的情况进行修改。

$stack = New-Object System.Collections.Stack
#Load first level
Get-ChildItem -Path "YOUR-PATH-HERE" | ForEach-Object { $stack.Push($_) }
#Recurse
while($stack.Count -gt 0 -and ($item = $stack.Pop())) {
    if ($item.PSIsContainer)
    {
        Write-Host "Recursing on item $($item.FullName)"
        Get-ChildItem -Path $item.FullName | ForEach-Object { $stack.Push($_) }
    } else {
        Write-Host "Processing item $($item.FullName)"
    }
}

相关内容