【问题标题】:Find paths that exceed SharePoint's 400 character limit查找超过 SharePoint 400 个字符限制的路径
【发布时间】:2019-08-01 13:20:43
【问题描述】:

我们最近迁移到在线 SharePoint 并发现我们的一些路径正在获取损坏的文件,因为它们超出了 SharePoint 设置的 400 个字符的限制。我只是我们特定站点的管理员,而不是我们 SharePoint 租户的全局管理员,因此尝试使用 SharePoint 的 PowerShell 集成不起作用。我还尝试在资源管理器视图中查看并从那里运行 PowerShell 以查找任何内容 -gt 400,但存在 Windows 限制,即在出现错误之前只能找到最多 248 个字符的路径。有没有人遇到过这个问题或知道任何解决方法?

我曾尝试将模块 SharePointPnPPowerShellOnline 与 PowerShell 一起使用,但由于我不是全局管理员而出现禁止错误。我还尝试在 Windows 资源管理器视图中递归查看,但出现错误。

这是尝试在 Windows 资源管理器视图中执行此操作时出现的错误:

Get-ChildItem : 指定的路径、文件名或两者都太长。 完全限定的文件名必须少于 260 个字符,并且 目录名称必须少于 248 个字符

【问题讨论】:

  • win10 可以启用对长[er] 文件路径的本机支持。此外,Robocopy 实用程序可以为您获取全名 - 将其设置为简单地执行 /L 以不更改任何内容,只需 List 它会做什么。然后你可以解析你的长文件的日志文件......并且 Robocopy 可以将这些文件移动到其他地方,以便你可以使用更短的路径。

标签: powershell sharepoint


【解决方案1】:

您是否考虑过使用 SharePoint 在线 CSOM?你可以使用这个 nuget -> SharePointPnP

有了这个你可以实现任何类型的应用程序(如控制台应用程序)并获取所有文件夹中的所有文件夹、文件和文件,并获取它们的名称、路径或任何需要的内容,并检查它是否超过 400 个字符. (请记住,FileServerRelativeUrl 等附加列需要在上下文中加载)

try
{
    string siteUrl = "SiteURL";
    AuthenticationManager authManager = new AuthenticationManager();
    using (ClientContext context = authManager.GetWebLoginClientContext(siteUrl))
    {
        List list = context.Web.Lists.GetByTitle("LibName");
        context.Load(list);
        context.Load(list.RootFolder);
        context.Load(list.RootFolder.Folders);
        context.Load(list.RootFolder.Files);
        context.ExecuteQuery();
        FolderCollection folderCol = list.RootFolder.Folders;
        foreach (Folder f in folderCol)
        {
            context.Load(f.Files);
            context.ExecuteQuery();
            FileCollection innerFileCol = f.Files;
            foreach (File file in innerFileCol)
            {
                //var x = file.Name;
                // ToDo other logic here 
            }
        }
        FileCollection fileCol = list.RootFolder.Files;
        foreach (File file in fileCol)
        {
            //var x = file.Name;
            // ToDo other logic here 
        }
    }
}
catch (Exception ex)
{
    // log error
    throw;
}

希望对你有帮助:)

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 2013-07-15
    • 1970-01-01
    相关资源
    最近更新 更多