如何用Power Query生成含授权用户及权限的SharePoint站点文件夹报表
Folder.Contents只能返回文件夹的基础元数据(名称、路径、大小等),要获取权限信息,得借助SharePoint REST API来拉取每个文件夹的权限分配数据。以下是完整实现步骤:
步骤1:递归获取所有文件夹的ServerRelativeUrl
首先遍历站点所有文件夹(包括子文件夹),提取每个文件夹的ServerRelativeUrl——这是调用REST API的关键参数。
在Power Query编辑器中,新建空白查询,粘贴以下代码(替换你的站点根URL):
let SiteUrl = "https://your-domain.sharepoint.com/sites/your-site", // 递归函数:获取所有文件夹及子文件夹 GetAllFolders = (FolderPath as text) as table => let FolderContents = Folder.Contents(FolderPath), Folders = Table.SelectRows(FolderContents, each [Kind] = "Folder"), // 提取ServerRelativeUrl:从完整路径中截取站点根之后的部分 AddServerRelativeUrl = Table.AddColumn(Folders, "ServerRelativeUrl", each Text.Replace([Folder Path], SiteUrl, "")), // 递归调用获取子文件夹 SubFolders = Table.Combine(Table.AddColumn(AddServerRelativeUrl, "SubFolders", each GetAllFolders([Folder Path]))[SubFolders]), // 合并当前文件夹和子文件夹 AllFolders = Table.Combine({AddServerRelativeUrl, SubFolders}) in AllFolders, // 调用函数获取根目录下所有文件夹 AllSiteFolders = GetAllFolders(SiteUrl), // 去重并保留关键列 CleanedFolders = Table.Distinct(Table.SelectColumns(AllSiteFolders, {"Name", "Folder Path", "ServerRelativeUrl"})) in CleanedFolders
步骤2:调用REST API获取权限数据
给每个文件夹添加自定义列,调用API拉取权限分配信息:
- 在
CleanedFolders查询中,添加自定义列,公式如下(替换站点URL):
let ApiUrl = "https://your-domain.sharepoint.com/sites/your-site/_api/web/getfolderbyserverrelativeurl('" & [ServerRelativeUrl] & "')/ListItemAllFields/RoleAssignments?$expand=Member,RoleDefinitionBindings", Response = Web.Contents(ApiUrl, [Headers=[Accept="application/json;odata=nometadata"]]), JsonData = Json.Document(Response), // 解析权限数据:提取用户/组名称、权限级别 ParsedPermissions = Table.FromRecords(JsonData[value], {"Member", "RoleDefinitionBindings"}), ExtractMemberName = Table.AddColumn(ParsedPermissions, "用户/组名称", each [Member][Title]), ExtractPermissions = Table.AddColumn(ExtractMemberName, "权限级别", each Text.Combine(List.Transform([RoleDefinitionBindings], each [Name]), "; ")) in Table.SelectColumns(ExtractPermissions, {"用户/组名称", "权限级别"})
- 展开这个自定义列,将权限数据与文件夹信息合并。
步骤3:整理最终报表
- 删除冗余字段,按需调整列顺序
- 可选:添加筛选器,排除继承权限的文件夹(可通过API返回的
HasUniqueRoleAssignments字段识别直接分配的权限)
注意事项
- 确保你的账号有站点权限管理的访问权限,否则API会返回403错误
- 如果站点启用了多重身份验证,需要在Power Query中配置"组织账户"身份验证
内容的提问来源于stack exchange,提问作者Ani
相关产品推荐
相关产品推荐

