查找超出SharePoint 400个字符限制的路径

时间:2019-08-01 13:20:43

标签: powershell sharepoint

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

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

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

  

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

1 个答案:

答案 0 :(得分:0)

您是否考虑过使用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;
    }

我希望这会有所帮助:)