Microsoft 365 开发:如何将文件夹权限复制到同一文档库的另一个文件夹上?

网友投稿 295 2022-10-02

Microsoft 365 开发:如何将文件夹权限复制到同一文档库的另一个文件夹上?

Blog链接:​​​to的功能或者PowerShell的脚本将文档从一个文件夹迁移到另一个文件夹,或者用OneDrive for Business客户端做少量数据的迁移,但文档迁移之后,复杂的权限在不使用第三方工具的前提下,该如何操作呢?

解决方案:今天给大家分享一下如何使用PowerShell将文件夹权限复制到同一文档库的另一个文件夹上。

具体操作步骤:

1.     连接PnPOnline,命令如下:

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

$WebURL = "/sites/Contoso_China/Support Training/Microsoft 365 Documents"

4.     获取目的端的文件夹URL,并赋给$TargetFolderURL,命令如下:

$TargetFolderURL= "/sites/Contoso_China/Support Training/Support Team_Technical"

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

Function Copy-PnPFolderPermissions{ [cmdletbinding()] param( [Parameter(Mandatory=$True)] [string] $WebURL, [Parameter(Mandatory=$True)] [string] $SourceFolderURL, [Parameter(Mandatory=$True)] [string] $TargetFolderURL, [Parameter(Mandatory=$False)] [Bool] $AppendToExisting = $True ) Try { Connect-PnPOnline -Url $WebURL -Interactive $Web = Get-PnPweb $Ctx = Get-PnPContext $SourceFolderItem = Get-PnPFolder -Url $SourceFolderURL -Includes ListItemAllFields.HasUniqueRoleAssignments $SourceFolder = $SourceFolderItem.ListItemAllFields $TargetFolderItem = Get-PnPFolder -Url $TargetFolderURL -Includes ListItemAllFields.HasUniqueRoleAssignments $TargetFolder = $TargetFolderItem.ListItemAllFields If(!$TargetFolder.HasUniqueRoleAssignments) { If($AppendToExisting -eq $True) { $TargetFolder.BreakRoleInheritance($True,$False) } else { $TargetFolder.BreakRoleInheritance($False,$False) } } Else { If($AppendToExisting -eq $False) { $TargetFolder.ResetRoleInheritance() $TargetFolder.BreakRoleInheritance($False,$False) } } Invoke-PnPQuery $SourceRoleAssignments = Get-PnPProperty -ClientObject $SourceFolder -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) { $RoleDefBindings = New-Object Microsoft.SharePoint.Client.RoleDefinitionBindingCollection($Ctx) ForEach($RoleDefinition in $SourcePermissions) { $RoleDefBindings.Add($RoleDefinition) } $Permissions = $TargetFolder.RoleAssignments.Add($RoleAssignment.Member,$RoleDefBindings) $TargetFolder.Update() Invoke-PnPQuery Write-host "Copied '$($RoleAssignment.Member.Title)' with Permissions '$PermissionLevels'" } } } } Catch { write-host -f Red "Error Copying Folder Permissions!" $_.Exception.Message }}

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

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

Copy-PnPFolderPermissions -WebURL $WebURL -SourceFolderURL $SourceFolderURL -TargetFolderURL $TargetFolderURL

执行成功,权限已经成功复制到目的端,说明:脚本支持对共享权限的复制,关于跨文档库支持文件夹的权限复制,将涉及User和Role是否存在的判断,相对较复杂,若大家日后有类似需求,欢迎线下交流。

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

上一篇:Microsoft 365 开发:如何移除用户在文件夹以及其下子节点的权限?
下一篇:Springboot
相关文章

 发表评论

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