Làm cách nào để sao chép quyền từ thư mục này sang thư mục khác trong SharePoint Online bằng PowerShell?
Yêu cầu: Sao chép quyền từ thư mục này sang thư mục khác trong SharePoint Online.
Quyền sao chép SharePoint Online từ thư mục này sang thư mục khác bằng PowerShell
Bạn đã bao giờ muốn sao chép quyền từ thư mục hiện có sang thư mục mới trong SharePoint Online chưa? Khi làm việc với SharePoint Online, có thể đôi khi bạn cần sao chép quyền từ thư mục này sang thư mục khác. Đây có thể là một quá trình tẻ nhạt nếu bạn phải thực hiện thủ công và không có cách nào dễ dàng hơn để thực hiện việc này mà không cần sử dụng các công cụ của bên thứ 3. Không còn nữa! Đây là tập lệnh PowerShell để sao chép quyền từ thư mục này sang thư mục khác trong SharePoint Online!
#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
Tập lệnh này sẽ thêm vào các quyền hiện có của thư mục đích theo mặc định. Bạn có thể chuyển tham số tùy chọn cho -AppendToExisting bằng “$False” nếu bạn muốn xóa tất cả các quyền hiện có của thư mục đích và sao chép quyền từ thư mục nguồn.
