我们最近迁移到了SharePoint Online,发现我们的一些路径正在损坏的文件,因为它们超过了SharePoint设置的400个字符的限制。我只是我们特定站点的管理员,而不是SharePoint Tenant的全局管理员,因此尝试使用SharePoint的PowerShell集成无效。我还尝试在资源管理器视图中查看并从那里运行PowerShell以查找任何内容-gt 400,但是Windows的局限性是在出现错误之前只能找到最多248个字符的路径。有没有人遇到这个问题或知道任何解决方法?
我已尝试将模块SharePointPnPPowerShellOnline
与PowerShell一起使用,但由于我不是全局管理员,因此得到禁止的错误。我还尝试在Windows资源管理器视图中递归查找,但出现错误。
在Windows资源管理器视图中尝试执行此操作时出现错误:
Get-ChildItem:指定的路径,文件名或两者都太长。 完全限定的文件名必须少于260个字符,并且 目录名称必须少于248个字符
答案 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;
}
我希望这会有所帮助:)