Windows、PowerShell 和长路径

Windows、PowerShell 和长路径

我想你和我一样,经常看到表格的路径 !!! 重要____新____! 不要删除!!!98819 年 649 月 30 日的订单号 1985-XNUMX-B 关于任命 Ivan Aleksandrovich Kozlov 为支持企业 VIP 客户和在场外组织商务会议的部门代理负责人。.

通常您无法立即在 Windows 中打开此类文档。 有人以磁盘映射的形式实践解决方法,有人使用可以处理长路径的文件管理器:Far Manager、Total Commander 等。 还有更多的人悲伤地看着他们创建的 PS 脚本,其中投入了大量的工作,并且在测试环境中大放异彩,在战斗环境中,无奈地抱怨一项不可能完成的任务: 指定的路径、文件名或两者都太长。 完全限定的文件名必须少于 260 个字符,目录名必须少于 248 个字符。
事实证明,260 个字符“不仅适用于所有人”就足够了。 如果您有兴趣超越允许的范围,我会在 cat 下询问。

以下是限制文件路径长度的一些不幸后果:

稍微偏离主题,我注意到对于 DFS 复制,文章中考虑的问题并不可怕,长名称的文件成功地从一个服务器传输到另一个服务器(当然,除非你 做对了).

我还想提请注意一个非常有用的实用程序,它不止一次帮助过我 ROBOCOPY. 她也不怕路漫漫其修远兮,见多识广。 因此,如果任务减少到复制/传输文件数据,您可以就此打住。 如果您需要使用文件系统访问控制列表 (DACL),请移开视线 亚硝酸盐. 尽管年代久远,但它在 Windows 2012 R2 上完美地展现了自己。 这里 考虑应用方法。

我也有兴趣学习如何使用长 PowerShell 路径。 和他在一起,几乎就像是关于伊万沙皇和美丽的瓦西里萨的大胡子笑话。

快速的方式

切换到 Linux,不用担心 Windows 10/2016/2019 并启用适当的组策略设置/注册表调整。 我不会详细介绍这个方法,因为。 网上已经有很多关于这个主题的文章,例如, .

考虑到在大多数公司中有很多,委婉地说,不是新版本的操作系统,这种方法仅用于在纸上书写是快速的,当然,除非你是那些几乎没有遗留系统和 Windows 的幸运者之一10/2016/2019 统治。

很长的路要走

在这里我们立即做出保留,这些更改不会影响 Windows 资源管理器的行为,但可以在 PowerShell cmdlet 中使用长路径,例如 Get-Item、Get-ChildItem、Remove-Item 等。

首先,让我们更新 PowerShell。 已经完成一、二、三。

  1. 我们将 .NET Framework 更新到至少 4.5 的版本。 操作系统必须至少为 Windows 7 SP1/2008 R2。 当前版本可以下载 这里阅读更多信息 这里.
  2. 下载 并安装 Windows Management Framework 5.1
  3. 我们重新启动机器。

勤奋的人可以手动完成上述步骤,懒惰的人可以借助 SCCM、策略、脚本和其他自动化工具来完成。

PowerShell 的当前版本可以从变量中找到 $PS版本表. 更新后应该是这样的:

Windows、PowerShell 和长路径

现在使用 cmdlet 时 GET-ChildItem 和其他人喜欢他而不是平常 途径 будемиспользовать 文字路径.

路径的格式会略有不同:

Get-ChildItem -LiteralPath "?C:Folder"
Get-ChildItem -LiteralPath "?UNCServerNameShare"
Get-ChildItem -LiteralPath "?UNC192.168.0.10Share"

为了方便将路径从通常的格式转换为格式 文字路径 你可以使用这个功能:

Function ConvertTo-LiteralPath 
Param([parameter(Mandatory=$true, Position=0)][String]$Path)
    If ($Path.Substring(0,2) -eq "") {Return ("?UNC" + $Path.Remove(0,1))}
    Else {Return "?$Path"}
}

请注意,在设置参数时 文字路径 不能使用通配符 (*, ? 等等)。

除了参数 文字路径, 在更新的 PowerShell cmdlet 中 GET-ChildItem 接收到的参数 深度,你可以用它来设置递归搜索的嵌套深度,我用了几次并且很满意。

现在您不必担心您的 PS 脚本会从一条棘手的长途中误入歧途,并且不会看到远处的文件。 例如,在编写脚本以重置 DFSR 文件夹中文件的“临时”属性时,这种方法对我有很大帮助。 但这是另一个故事,我将在另一篇文章中尝试讲述。 我正在等待您的有趣评论,我建议您进行一项调查。

相关链接:
docs.microsoft.com/en-us/dotnet/api/microsoft.powershell.commands.contentcommandbase.literalpath?view=powershellsdk-1.1.0
docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-5.1
stackoverflow.com/questions/46308030/handling-path-too-long-exception-with-new-psdrive/46309524
luisabreu.wordpress.com/2013/02/15/theliteralpath-参数

只有注册用户才能参与调查。 登录拜托

长路径问题与您有关吗?

  • 相关,但已经决定

  • 有影响,但不大

  • 没想到,似乎一切正常

  • 没有

  • 其他(备注说明)

155 位用户投票。 25 名用户弃权。

来源: habr.com

添加评论