在Windows Server 2008 R2 VM 上,我将 PowerShell 升级到 v3,希望利用Get-ChildItem (gci) 性能改进。此行在 v2 中运行没有错误:
$search = gci $dir -recurse -exclude "*.mdf" | where {$_.length -gt 100mb}
升级到v3后,为什么同一行会出现这个错误?$dir
值不变。
gci : 指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,目录名必须少于 248 个字符。在 line:1 char:11 + $search = gci $dir -recurse -exclude "*.mdf" | 其中 {$_.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
在Continue
v2 和 v3 中。
$search.count
在 v2 和 v3 中都是 8,所以我不太担心丢失的东西,但想了解行为的变化。
我尝试-force
在 v2 中添加,看到类似的 PathTooLong 错误,.count
为 10。在添加-force
v3 后,.count
为 9。然后我恢复到 v2,再次找到 10 个带有-force
. 尽管如此,更改数据$dir
可能会解释.count
差异,但在我们的环境中,更改数据并不能实际解释 v3 中 PathTooLong 错误的一致存在,而 v2 则不然。既然我的好奇心已经战胜了我,我希望有人能对这个谜团有所了解,并让我免于错误处理,我承认,这可能会提供更多线索。
FWIW,TechNet 上的使用文档说它适用于 v2 和 v3。该-Force
参数的默认值为 False。
关于 PowerShell 和MAX_PATH
v1 的一些背景知识。
在Windows Server 2008 R2 VM 上,我将 PowerShell 升级到 v3,希望利用Get-ChildItem (gci) 性能改进。此行在 v2 中运行没有错误:
$search = gci $dir -recurse -exclude "*.mdf" | where {$_.length -gt 100mb}
升级到v3后,为什么同一行会出现这个错误?$dir
值不变。
gci : 指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,目录名必须少于 248 个字符。在 line:1 char:11 + $search = gci $dir -recurse -exclude "*.mdf" | 其中 {$_.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
在Continue
v2 和 v3 中。
$search.count
在 v2 和 v3 中都是 8,所以我不太担心丢失的东西,但想了解行为的变化。
我尝试-force
在 v2 中添加,看到类似的 PathTooLong 错误,.count
为 10。在添加-force
v3 后,.count
为 9。然后我恢复到 v2,再次找到 10 个带有-force
. 尽管如此,更改数据$dir
可能会解释.count
差异,但在我们的环境中,更改数据并不能实际解释 v3 中 PathTooLong 错误的一致存在,而 v2 则不然。既然我的好奇心已经战胜了我,我希望有人能对这个谜团有所了解,并让我免于错误处理,我承认,这可能会提供更多线索。
FWIW,TechNet 上的使用文档说它适用于 v2 和 v3。该-Force
参数的默认值为 False。
关于 PowerShell 和MAX_PATH
v1 的一些背景知识。