【问题标题】:Get-ChildItem not working with long UNC pathGet-ChildItem 不适用于长 UNC 路径
【发布时间】:2013-11-15 09:25:09
【问题描述】:

我尝试在 Powershell 中使用带有 Get-ChildItem 的长 UNC 路径

Get-ChildItem -Path "\\?\c:\blabla"

并且Powershell说路径中有非法字符。同样的路径也适用于Resolve-Path。如何在gci 中使用“\\?\”语法?

【问题讨论】:

  • 如果你不做任何变量替换,你可以尝试-LiteralPath "yourpath"或使用单引号-Path 'PathWithSpecialChars'
  • 我不使用变量 atm。但是,我发现使用管理员共享 C$ 而不是 C: 不会产生语法错误,但 gci 也没有任何输出。
  • 此外,gci "\\?\UNC\c:\blabla" 不会产生语法错误,但也没有结果。

标签: powershell path unc get-childitem


【解决方案1】:

好消息! PowerShell v6.0.0-beta.3 及更高版本现在默认支持 UNC 路径;它会自动将 UNC 字符串添加到大于 260 个字符的路径:

https://github.com/PowerShell/PowerShell/releases/tag/v6.0.0-beta.3 https://github.com/PowerShell/PowerShell/pull/3960 https://github.com/PowerShell/PowerShell/pull/3960/files/3e7e28d49f306ab4874e32cf10eabb43559dae26#diff-52b1a915619c71b288b3f92f944924c4

修复 PowerShell Core 以允许使用超过 260 个字符的长路径。 (#3960)

...

在调用 Windows 原生 API 以确定项目是否存在时,请确保在路径前添加 \?\ 以允许路径 > 260 个字符。


您只需下载该版本或更高版本(通过PowerShell 标签)。我刚刚将 Windows x64 的 v6.0.0-beta.9 下载到我的 Windows 10 机器上并对其进行了测试,创建了一个包含大约 460 个字符的路径!

【讨论】:

    【解决方案2】:

    我似乎找不到适用于? 的咒语。但是,以下确实有效:

    gci '\\localhost\C$\'
    gci ('\\{0}\C$\' -f $ENV:COMPUTERNAME)
    

    更新: 参考:UNC path does not work with .NET?

    \\?\ 部分是特定于 windows 的,本质上与 powershell 中的--% 做同样的事情,即“这之后的所有内容都是文字字符串”

    例子:

    $LongUncPath = '\\?\C:\'
    Get-ChildItem -Path:$LongUncPath.TrimStart('\\?\')
    

    【讨论】:

    • 我也看到了。 UNC 有效,但长 UNC 无效。问题是我需要长 UNC。有谁知道 long UNC 是否按设计工作?那么我需要寻找一种解决方法......
    【解决方案3】:

    我发现路径末尾有不可打印的字符。我通过使用 trim() 更正了“路径中的非法字符”以删除它们。

    $path.trim()

    【讨论】:

      猜你喜欢
      • 2016-12-14
      • 1970-01-01
      • 2020-06-16
      • 2012-06-16
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多