如何利用PowerShell命令复制文件夹权限

网友投稿 366 2022-10-02

如何利用PowerShell命令复制文件夹权限

Blog链接:​​Online的相同网站集下的某个文件夹的权限复制到另一个文件夹中,如果权限足够复杂,我们手动添加权限的话,将是一个大工程,今天呢,将给大家分享如何使用PowerShell脚本来实现这个需求,而不是使用第三方工具。

PnP PowerShell的操作命令步骤如下所示:

连接SharePoint Online的Site Collection的命令,如下所示:

Connect-PnPOnline –Url Function to copy permissions between Folders in SharePoint OnlineFunction 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 to PnP Online Connect-PnPOnline -Url $WebURL -Interactive #Get the Web $Web = Get-PnPweb $Ctx = Get-PnPContext #Get Source and Target Folders $SourceFolderItem = Get-PnPFolder -Url $SourceFolderURL -Includes ListItemAllFields.HasUniqueRoleAssignments $SourceFolder = $SourceFolderItem.ListItemAllFields $TargetFolderItem = Get-PnPFolder -Url $TargetFolderURL -Includes ListItemAllFields.HasUniqueRoleAssignments $TargetFolder = $TargetFolderItem.ListItemAllFields #if permissions are Inherited in Target Folder, Break the Inheritance If(!$TargetFolder.HasUniqueRoleAssignments) { If($AppendToExisting -eq $True) { #Break Folder permissions - keep all existing permissions & Clear Item level permissions $TargetFolder.BreakRoleInheritance($True,$False) } else { $TargetFolder.BreakRoleInheritance($False,$False) } } Else #If the Folder has unique Permissions already { If($AppendToExisting -eq $False) { $TargetFolder.ResetRoleInheritance() $TargetFolder.BreakRoleInheritance($False,$False) } } Invoke-PnPQuery #Get all permissions assigned to the source folder $SourceRoleAssignments = Get-PnPProperty -ClientObject $SourceFolder -Property RoleAssignments #Copy Source Folder permissions to Destination Folder ForEach($RoleAssignment in $SourceRoleAssignments) { #Get RoleDefinitions of the Role Assignment Get-PnPProperty -ClientObject $RoleAssignment -Property RoleDefinitionBindings, Member #Leave the Hidden permissions If($RoleAssignment.Member.IsHiddenInUI -eq $False) { $SourcePermissions = $RoleAssignment.RoleDefinitionBindings | Where {$_.Name -notin("Limited Access")} $PermissionLevels = ($SourcePermissions | Select -ExpandProperty Name) -join "; " If($SourcePermissions -ne $null) { #Add Source Folder's Permission Level to the Target Folder $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 }} #Set Parameters$WebURL = " #Server Relative URLs of Source and Target Folders$SourceFolderURL = "/sites/Lenovo/Shared Documents/SharePoint开发培训文档"$TargetFolderURL = "/sites/Lenovo/Shared Documents/Office 365 Training" #Call the function to copy Folder permissions Copy-PnPFolderPermissions -WebURL $WebURL -SourceFolderURL $SourceFolderURL -TargetFolderURL $TargetFolderURL

执行完成之后,可以看到Copy Permission的记录,如下所示:

说明:默认的情况下,此脚本会添加到目标文件夹的现有权限,如果你想清除目标文件夹的现有权限,然后将源端文件夹的权限复制到目的端,你可以为-AppendToExisting传递一个可选参数“$False”

谢谢大家的阅读,如果大家有权限相关的案例需要讨论,欢迎线下联系。

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

上一篇:详解Java面向对象之多态的原理与实现
下一篇:如何将Microsoft Loop Pages添加到Microsoft Teams的团队中?
相关文章

 发表评论

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