You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Power Query生成含授权用户及权限的SharePoint站点文件夹报表

用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拉取权限分配信息:

  1. 在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, {"用户/组名称", "权限级别"})
  1. 展开这个自定义列,将权限数据与文件夹信息合并。

步骤3:整理最终报表

  • 删除冗余字段,按需调整列顺序
  • 可选:添加筛选器,排除继承权限的文件夹(可通过API返回的HasUniqueRoleAssignments字段识别直接分配的权限)

注意事项

  • 确保你的账号有站点权限管理的访问权限,否则API会返回403错误
  • 如果站点启用了多重身份验证,需要在Power Query中配置"组织账户"身份验证

内容的提问来源于stack exchange,提问作者Ani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:43:28