当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何使用 PowerShell 将权限从 SharePoint Online 中的一个文件夹复制到另一个文件夹?

作者:精品下载站 日期:2024-12-14 21:41:00 浏览:13 分类:玩电脑

如何使用 PowerShell 将权限从 SharePoint Online 中的一个文件夹复制到另一个文件夹?


要求:将权限从 SharePoint Online 中的一个文件夹复制到另一个文件夹。

[玩转系统] 如何使用 PowerShell 将权限从 SharePoint Online 中的一个文件夹复制到另一个文件夹?

使用 PowerShell 将 SharePoint Online 从一个文件夹复制到另一个文件夹的权限

曾经想要将权限从现有文件夹克隆到 SharePoint Online 中的新文件夹吗?使用 SharePoint Online 时,有时可能需要将权限从一个文件夹复制到另一个文件夹。如果您必须手动执行此操作,这可能是一个乏味的过程,并且在不使用第三方工具的情况下没有更简单的方法来执行此操作。好吧,不再是了!以下是用于将权限从 SharePoint Online 中的一个文件夹复制到另一个文件夹的 PowerShell 脚本!


#PowerShell Function to copy permissions between Folders in SharePoint Online
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 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 = "https://crescent.sharepoint.com/sites/Marketing"

#Server Relative URLs of Source and Target Folders
$SourceFolderURL = "/sites/Marketing/Shared Documents/Old"
$TargetFolderURL = "/sites/Marketing/Shared Documents/New"

#Call the function to copy Folder permissions 
Copy-PnPFolderPermissions -WebURL $WebURL -SourceFolderURL $SourceFolderURL -TargetFolderURL $TargetFolderURL

默认情况下,此脚本会附加到目标文件夹的现有权限。如果要清除目标文件夹的所有现有权限并从源文件夹复制权限,可以为 -AppendToExisting 传递一个可选参数“$False”。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯