gpt4 book ai didi

powershell - PowerShell v3 中 Get-ChildItem 的 PathTooLong 错误,但不是 v2

转载 作者:行者123 更新时间:2023-12-03 23:29:15 24 4
gpt4 key购买 nike

Windows Server 2008 上R2 VM,我将 PowerShell 升级到 v3 希望利用 Get-ChildItem (gci) 性能改进。此行在 v2 中运行时没有错误:

$search = gci $dir -recurse -exclude "*.mdf" | where {$_.length -gt 100mb}

升级到v3后,为什么同样的行报这个错? $dir 值未更改。

gci : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters. At line:1 char:11 + $search = gci $dir -recurse -exclude "*.mdf" | where {$_.length -gt 100mb} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ReadError: (\server.domain...DETAILS 1.0.prt:String) [Get-ChildItem], PathTooLongException + FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand

应用 Windows 更新并重新启动后没有任何变化。我在升级 PowerShell 之前拍摄了 VM 的快照,因此我可以轻松地来回切换。

$errorActionPreference 在 v2 和 v3 中都是Continue

$search.count 在 v2 和 v3 中都是 8,所以我不是特别担心丢失的东西,但想了解行为的变化。

我尝试在 v2 中添加 -force,看到类似的 PathTooLong 错误,并且 .count 为 10。在 v3 中添加 -force 后, .count 是 9。然后我恢复到 v2 并再次找到 10 个带有 -force 的文件。尽管如此,更改 $dir 下的数据还是有可能解释 .count 的差异,但在我们的环境中,更改数据无法实际解释 v3 中始终存在的 PathTooLong 错误,但不是 v2。既然我的好奇心已经战胜了我,我希望有人能揭开这个谜团,并让我免于错误处理,我承认,这可能会提供更多线索。

FWIW,usage documentation on TechNet说它适用于 v2 和 v3。 -Force 参数的默认值为 False。

Some background在 PowerShell 和 v1 时代的 MAX_PATH 上。

Windows Server 2008 上R2 VM,我将 PowerShell 升级到 v3 希望利用 Get-ChildItem (gci) 性能改进。此行在 v2 中运行时没有错误:

$search = gci $dir -recurse -exclude "*.mdf" | where {$_.length -gt 100mb}

升级到v3后,为什么同样的行报这个错? $dir 值未更改。

gci : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters. At line:1 char:11 + $search = gci $dir -recurse -exclude "*.mdf" | where {$_.length -gt 100mb} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ReadError: (\server.domain...DETAILS 1.0.prt:String) [Get-ChildItem], PathTooLongException + FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand

应用 Windows 更新并重新启动后没有任何变化。我在升级 PowerShell 之前拍摄了 VM 的快照,因此我可以轻松地来回切换。

$errorActionPreference 在 v2 和 v3 中都是Continue

$search.count 在 v2 和 v3 中都是 8,所以我不是特别担心丢失的东西,但想了解行为的变化。

我尝试在 v2 中添加 -force,看到类似的 PathTooLong 错误,并且 .count 为 10。在 v3 中添加 -force 后, .count 是 9。然后我恢复到 v2 并再次找到 10 个带有 -force 的文件。尽管如此,更改 $dir 下的数据还是有可能解释 .count 的差异,但在我们的环境中,更改数据无法实际解释 v3 中始终存在的 PathTooLong 错误,但不是 v2。既然我的好奇心已经战胜了我,我希望有人能揭开这个谜团,并让我免于错误处理,我承认,这可能会提供更多线索。

FWIW,usage documentation on TechNet说它适用于 v2 和 v3。 -Force 参数的默认值为 False。

Some background在 PowerShell 和 v1 时代的 MAX_PATH 上。

最佳答案

我知道 PathTooLongException 并非特定于 PowerShell。它由在后台调用的 Win32 API 抛出。如果您必须使用长路径,您可能会发现 PowerShell 是否允许您改用 Win32 API 的 Unicode 版本。 See here for information

至于为什么版本 2 没有抛出错误,我只能假设版本 2 对异常的内部处理“更好”。

关于powershell - PowerShell v3 中 Get-ChildItem 的 PathTooLong 错误,但不是 v2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13312487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com