Board logo

标题: [转载教程] PowerShell 技能连载 - 请注意 UNC 路径! [打印本页]

作者: victorwoo    时间: 2014-8-11 09:25     标题: PowerShell 技能连载 - 请注意 UNC 路径!

原始链接:PowerShell 技能连载 - 请注意 UNC 路径!
发表日期:2014-08-04


适用于所有 PowerShell 版本

许多 cmdlet 可以处理 UNC 路径,但是使用 UNC 路径会导致很多古怪的情况。请看以下:
  1. PS> Test-Path -Path \\127.0.0.1\c$
  2. True
复制代码
这段代码返回了 `true`,该 UNC 路径存在。现在将当前驱动器变为一个非文件系统驱动器,然后再次实验:
  1. PS> cd hkcu:\
  2. PS> Test-Path -Path \\127.0.0.1\c$
  3. False
复制代码
同样的路径现在返回了 `false`。这是因为 UNC 路径并不包含驱动器号,而 PowerShell 需要驱动器号来指定正确的提供器。如果一个路径不包含驱动器号,那么 PowerShell 假设使用当前驱动器的提供器。所以如果您将当前的目录改为注册表,PowerShell 尝试在那儿查找 UNC 路径,那么就会失败。

更糟糕的是,出于某些未知的原因,但您用 `net use` 来映射驱动器时,PowerShell 在使用 cmdlet 来访问驱动器时可能会也可能不会产生混淆。

解决方案十分简单:当您用 cmdlet 访问 UNC 时,始终在 UNC 路径前面加上正确的提供器名称。这将消除该问题:
  1. PS> Test-Path -Path FileSystem::\\127.0.0.1\c$
  2. True
  3. PS> cd hkcu:\
  4. PS> Test-Path -Path \\127.0.0.1\c$
  5. False
  6. PS> Test-Path -Path FileSystem::\\127.0.0.1\c$
  7. True
复制代码
如果您遇到了 `net use` 产生的问题,也可以使用同样的办法,在路径前面加上 `“FileSystem::`。该问题可以立刻得到解决。


本文国际来源:Watch Out With UNC Paths!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2