检索SharePoint库中所有文件夹的所有唯一权限

时间:2020-07-28 09:59:22

标签: powershell sharepoint-online

我正在尝试生成一个报告,该报告具有SharePoint Online库的所有文件夹中的所有唯一权限(而不是用户权限,目的是检索组权限)。我使用SharePoint PnP编写了Powershell脚本。请参见下面。

$permissionCSV = "path-to-csv.csv"
$CAMLQuery = "<View Scope='RecursiveAll'><RowLimit>5000</RowLimit></View>" 
$items = Get-PnPListItem -List "My-List" -Query $CAMLQuery
$ctx = $Get-PnPContext
foreach($item in $items) {
    if(item.FileSystemObjectType -eq 'folder') {
         Get-PnPProperty -ClientObject $item -Property HasUniqueRoleAssignments
         if ($item.HasUniqueRoleAssignments) {
             $ctx.load($item.RoleAssignments)
             $ctx.load($item.Folder)
             $ctx.ExecuteQuery()
        
             foreach($RoleAssignments in $item.RoleAssignments) {
                 $ctx.Load($RoleAssignments.Member)
                 $ctx.Load($RoleAssignments.RoleDefinitionBindings)
                 $ctx.ExecuteQuery()
            
                 foreach($RoleDefinition in $RoleAssignments.RoleDefinitionBindings) {                  
                     $RoleDefinition |
                         Select @{expression={$item.Folder.Name};Label="Name"},
                             @{expression={$item.Folder.ServerRelativeUrl};Label="Path"},
                             @{expression={$RoleAssignments.Member.Title};Label="Role"},
                             @{expression={$_.Name};Label="Permission"}|
                     Export-CSV $permissionCSV -Append -Force -Encoding UTF8 -NoTypeInformation
                 }  
             }
         }
     }
 }

此代码有效。但是,由于我们的库非常大(超过5000个文件夹),因此执行此类脚本需要几天的时间。所以我想知道我是否采取了错误的方法。我仅阅读的所有文章都提到了这种方法,该方法需要每个文件夹的网络通信...

有人知道不花费几天时间生成此类报告的最佳方法吗?欢迎任何想法,包括使用其他编程语言,但我希望尽可能避免使用付费的第三方服务。

谢谢您的帮助。

0 个答案:

没有答案