Microsoft 365 开发:如何将文档库或者列表权限复制到其他文档库或者列表上?

网友投稿 283 2022-10-02

Microsoft 365 开发:如何将文档库或者列表权限复制到其他文档库或者列表上?

Blog链接:​​​Online没有内置功能支持将现有文档库或者列表的权限复制到同一网站下的其他文档库或者列表中,如果我们需要在不使用第三方工具的情况下,快速的将用户或者组授予从一个已存在的文档库或者列表中复制到其他的文档库或者列表中,该如何实现呢?

解决方案:如之前文章我们所介绍的,我们可以借助Powershell脚本实现同一个网站中的文档库或者列表权限迁移,今天我们调用​​Copy-PnPListPermissions​​​​函数​​来实现该需求。

以源端Support Training文档库的权限为例,具体操作步骤如下所示:

1.     连接PnPOnline,命令如下:

2.     获取WebURL,并赋给$WebURL,命令如下:

$WebURL = ​​"Support Training"

4.     获取目的端的文档库URL,并赋给$ $TargetListName,命令如下:

$TargetListName= "Training Documents"

5.     调用函数Copy-PnPListPermissions,命令如下所示:

Function Copy-PnPListPermissions{ [cmdletbinding()] param( [Parameter(Mandatory=$True)] [string] $WebURL, [Parameter(Mandatory=$True)] [string] $SourceListName, [Parameter(Mandatory=$True)] [string] $TargetListName, [Parameter(Mandatory=$False)] [Bool] $AppendToExisting = $True ) Try { Connect-PnPOnline -Url $WebURL -Interactive $Web = Get-PnPweb $Ctx = Get-PnPContext $SourceList = Get-PnPList $SourceListName -Includes HasUniqueRoleAssignments -ThrowExceptionIfListNotFound $TargetList = Get-PnPList $TargetListName -Includes HasUniqueRoleAssignments -ThrowExceptionIfListNotFound If(!$TargetList.HasUniqueRoleAssignments) { If($AppendToExisting -eq $True) { Set-PnPList -Identity $TargetList -BreakRoleInheritance -CopyRoleAssignments } else { Set-PnPList -Identity $TargetList -BreakRoleInheritance } } Else { If($AppendToExisting -eq $False) { Set-PnPList -Identity $TargetList -ResetRoleInheritance Set-PnPList -Identity $TargetList -BreakRoleInheritance } } $SourceRoleAssignments = Get-PnPProperty -ClientObject $SourceList -Property RoleAssignments ForEach($RoleAssignment in $SourceRoleAssignments) { Get-PnPProperty -ClientObject $RoleAssignment -Property RoleDefinitionBindings, Member If($RoleAssignment.Member.IsHiddenInUI -eq $False) { $SourcePermissions = $RoleAssignment.RoleDefinitionBindings | Where {$_.Name -notin("Limited Access")} $PermissionLevels = ($SourcePermissions | Select -ExpandProperty Name) -join "; " If($SourcePermissions -ne $null) { #Grant Source List's Permission Level to the Target List $RoleDefBindings = New-Object Microsoft.SharePoint.Client.RoleDefinitionBindingCollection($Ctx) ForEach($RoleDefinition in $SourcePermissions) { $RoleDefBindings.Add($RoleDefinition) } $Permissions = $TargetList.RoleAssignments.Add($RoleAssignment.Member,$RoleDefBindings) $TargetList.Update() Invoke-PnPQuery Write-host "Copied '$($RoleAssignment.Member.Title)' with Permissions '$PermissionLevels'" } } } } Catch { write-host -f Red "Error Copying List Permissions!" $_.Exception.Message }}

说明:​

调用该函数仅仅是将权限从源端文档库复制到目的端已经存在的文档库,并非将目的端文档库的权限清除,再将源端文档库的权限复制到目的端文档库文档库或者列表权限复制仅限于同一个网站之间,若跨不同网站之间转移,需要额外修改脚本

执行权限复制,命令如下:

Copy-PnPListPermissions -WebURL $WebURL -SourceListName$SourceListName -TargetListName $TargetListName

执行成功,权限已经成功复制到目的端,关于跨网站支持文档库或者列表的权限复制,将涉及User和Role是否存在的判断,相对较复杂,若大家日后有类似需求,欢迎线下交流。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java深入讲解instanceof关键字的使用
下一篇:Microsoft 365 开发:如何将GroupMembership从一个用户Clone到另一个用户?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~