SharePoint Online: PowerShell Kullanarak Listedeki Tüm Öğeler İçin Benzersiz İzinleri Silme


Gereksinim: SharePoint Online belge kitaplığının tüm belgelerindeki tüm özelleştirilmiş izinleri sıfırlayın.

Varsayılan olarak, İzinler SharePoint'in tüm düzeylerinde üst öğelerinden devralınır. Örneğin, Alt Siteler izinleri üst site koleksiyonundan (veya üst siteden), listeler ve kitaplıklar izinleri siteden devralır ve listedeki öğeler listeden izinleri devralır. Dolayısıyla, ebeveyn düzeyinde izinlerde herhangi bir değişiklik yaparsanız, altındaki herhangi bir çocuk, kendi benzersiz izinlerini kullanmadığı sürece, ebeveynde yaptığınız izin değişikliklerini otomatik olarak devralır.

Bazen ayrıntılı düzeyde benzersiz izinler ayarlamanız gerekebilir ve elbette bozuk izinleri de sıfırlamanız gerekebilir.

SharePoint'teki Benzersiz İzinler Nasıl Silinir?

SharePoint liste öğeleri veya belgelerindeki özel izinleri sıfırlamak için şu adımları izleyin:

  1. Belgelerinizin depolandığı SharePoint kitaplığına gidin.
  2. Belgeye sağ tıklayın ve menüden “Erişimi Yönet” seçeneğini seçin.

  3. “Erişimi Yönet” Bölmesinin >> altındaki “Gelişmiş” bağlantısını tıklayın ve şeritteki “Benzersiz İzinleri Sil” düğmesini tıklayın. İstemi bir kez onaylayın!

Tamam, artık izinler belgenin üst kitaplığından Devralındı olarak ayarlandı. Ancak bekleyin, her bir belgeyi tek tek seçmek ve benzersiz izinleri kaldırmak için bu adımları tekrarlamak sıkıcıdır, siz de aynı fikirde değil misiniz? Bu yüzden, bu PowerShell betiğini bir SharePoint Listesindeki tüm öğelerdeki Bozuk Mirası Sıfırlamak için yazdım.

Çevrimiçi SharePoint'te sınırlı erişimden nasıl kurtulurum?
Sınırlı Erişim, kullanıcının temeldeki bir nesneye erişimi olduğu anlamına gelir. Örneğin. Bir belgeye benzersiz izin verirseniz, belge kitaplığı düzeyinde belirli kullanıcı "Sınırlı Erişime" sahip olacaktır. Kullanıcıya erişim sahibi olduğu öğeye erişmesi için sınırlı izin sağlar. Sınırlı erişimi kaldırmak istiyorsanız kullanıcının erişim sahibi olduğu öğeler üzerindeki benzersiz izni kaldırmanız gerekir.

SharePoint Çevrimiçi Liste Öğesinden Benzersiz İzinleri Kaldırmak için PowerShell:

Bu kodu kullanmak için istemci makinenizde SharePoint Online İstemci SDK'sının yüklü olması gerekir: https://www.microsoft.com/en-us/download/details.aspx?id=42038. SharePoint Online liste öğesindeki tüm benzersiz izinlerin nasıl kaldırılacağı aşağıda açıklanmıştır


#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

#Function to remove unique permissions and inherit from the parent
Function Remove-ListItemUniquePermissions
{
param
    (
        [Parameter(Mandatory=$true)] [string] $SiteURL,
        [Parameter(Mandatory=$true)] [string] $ListName,
        [Parameter(Mandatory=$true)] [string] $ItemID        
    )

    Try {
        $Cred= Get-Credential
        $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)

        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = $Credentials

        #Remove unique permissions and reset inheritance
        $List=$Ctx.Web.Lists.GetByTitle($ListName)
        $ListItem=$List.GetItemByID($ItemID)
        $ListItem.ResetRoleInheritance()
        $Ctx.ExecuteQuery()

        Write-Host "Unique Permissions are removed and inherited from the Parent!" -ForegroundColor Green
    }

    Catch {
        write-host -f Red "Error Deleting Unique Permissions!" $_.Exception.Message
    } 
}

#Parameters
$SiteURL="https://crescent.sharepoint.com"
$ListName="Projects"
$ItemID="25"

#Call the function to remove unique permissions from a list
Remove-ListItemUniquePermissions -SiteURL $SiteURL -ListName $ListName -ItemID $ItemID 

SharePoint Online'daki Tüm Liste Öğelerinin Benzersiz İzinlerini Silmek için PowerShell Komut Dosyası

Benzersiz izinleri sıfırlamak için SharePoint Online PowerShell'i burada bulabilirsiniz:


#Load SharePoint Online Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
  
##Variables for Processing
$SiteUrl = "https://crescent.sharepoint.com/sites/Sales/"
$ListName= "Documents"
$UserName= "Salaudeen@crescent.com"
$Password ="Password goes here"
 
#Setup Credentials to connect
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName,(ConvertTo-SecureString $Password -AsPlainText -Force))
 
#Set up the context
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl) 
$Context.Credentials = $credentials
  
#Get the List
$List = $Context.web.Lists.GetByTitle($ListName)
 
#Get All List Items
$Query = New-Object Microsoft.SharePoint.Client.CamlQuery
$ListItems = $List.GetItems($Query)
$Context.Load($ListItems)
$Context.ExecuteQuery()

Write-host "Total Items Found:"$ListItems.Count
#Iterate through each list item
 $ListItems |  foreach {
    #Delete Unique Permission
    $_.ResetRoleInheritance()
 }
$Context.ExecuteQuery()

Write-host "Broken Permissions are Deleted on All Items!" -ForegroundColor Green

Yukarıdaki komut dosyasında iki iyileştirme yapabiliriz:

  1. Yukarıdaki komut dosyası 5000'den fazla öğe içeren büyük listeleri işlemez.
  2. Yukarıdaki komut dosyası, liste öğesinin benzersiz izinlere sahip olup olmadığını kontrol etmeden kalıtımı sıfırlar.

O halde yukarıdaki sorunları çözelim; işte güncellenmiş komut dosyası:

PowerShell kullanarak SharePoint Online'daki Benzersiz İzinleri Silme

Büyük listelerde veya belge kitaplıklarında (5000'den fazla öğeyle!) benzersiz izinleri sıfırlamak için PowerShell burada.


#Load SharePoint Online Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

##Variables for Processing
$SiteUrl = "https://crescent.sharepoint.com"
$ListName= "Documents"
  
#Get Credentials to connect
$Cred= Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
  
#Set up the context
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl) 
$Context.Credentials = $Credentials
   
#Get the List
$List = $Context.web.Lists.GetByTitle($ListName)

$Query = New-Object Microsoft.SharePoint.Client.CamlQuery
$Query.ViewXml = "<View Scope='RecursiveAll'><RowLimit>2000</RowLimit></View>"

#Batch process list items - to mitigate list threshold issue on larger lists
Do {  
    #Get items from the list in batches
    $ListItems = $List.GetItems($Query)
    $Context.Load($ListItems)
    $Context.ExecuteQuery()
          
    $Query.ListItemCollectionPosition = $ListItems.ListItemCollectionPosition
 
    #Loop through each List item
    ForEach($ListItem in $ListItems)
    {
        $ListItem.Retrieve("HasUniqueRoleAssignments")
        $Context.ExecuteQuery()
        if ($ListItem.HasUniqueRoleAssignments -eq $true)
        {
            #Reset Permission Inheritance
            $ListItem.ResetRoleInheritance()
            Write-host  -ForegroundColor Yellow "Inheritence Restored on Item:" $ListItem.ID
        }
    }
    $Context.ExecuteQuery()
} While ($Query.ListItemCollectionPosition -ne $null)
 
Write-host "Broken Permissions are Deleted on All Items!" -ForegroundColor Green

Listedeki Tüm Öğelerden Benzersiz İzinleri Kaldırmak için PnP PowerShell

Bir liste öğesinin izinlerini sıfırlamak için Set-PnPListItemPermission cmdlet'ini “InheritPermissions” anahtarıyla kullanabiliriz.


#Set Variables
$SiteURL = "https://crescent.sharepoint.com/sites/Marketing"
$ListName = "Documents"
 
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential)

#Get all list items in batches
$ListItems = Get-PnPListItem -List $ListName -PageSize 500

#Iterate through each list item
ForEach($ListItem in $ListItems)
{
    #Check if the Item has unique permissions
    $HasUniquePermissions = Get-PnPProperty -ClientObject $ListItem -Property "HasUniqueRoleAssignments"
    If($HasUniquePermissions)
    {        
        $Msg = "Deleting Unique Permissions on {0} '{1}' at {2} " -f $ListItem.FileSystemObjectType,$ListItem.FieldValues["FileLeafRef"],$ListItem.FieldValues["FileRef"]
        Write-host $Msg
        #Delete unique permissions on the list item
        Set-PnPListItemPermission -List $ListName -Identity $ListItem.ID -InheritPermissions 
    }
}

PnP PowerShell kullanarak bir Klasördeki Tüm dosyalar için Benzersiz İzinleri Sıfırlama

Bu sefer, SharePoint Çevrimiçi Klasöründe depolanan tüm dosyalardaki benzersiz izinleri sıfırlamak için PnP PowerShell'i kullanalım:


#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/Marketing"
$FolderServerRelativeURL = "/sites/Marketing/Branding/2018"

#Connect to the site
Connect-PnPOnline -Url $SiteURL -Interactive

#Get the Folder from given URL
$Folder = Get-PnPFolder -Url $FolderServerRelativeURL -Includes ListItemAllFields.ParentList
$ParentList = $Folder.ListItemAllFields.ParentList.Title

#Get All Files from the Folder
$Files = Get-PnPListItem -List $ParentList -FolderServerRelativeUrl $Folder.ServerRelativeUrl | Where {$_.FileSystemObjectType -eq "File"}

#Traverse through each file in the folder
ForEach ($File in $Files)
{
    #Check If File has Unique Permissions
    $HasUniquePermissions = Get-PnPProperty -ClientObject $File -Property HasUniqueRoleAssignments
    If($HasUniquePermissions)
    {
        #Reset Broken Inheritance
        $File.ResetRoleInheritance()
        $File.update()
        Invoke-PnPQuery
        Write-Host "Reset Unique Permissions on File $($File.FieldValues["FileRef"])" -ForegroundColor Green
    }
}

Benzer şekilde, PowerShell ile SharePoint Online siteleri, listeleri ve klasörlerindeki benzersiz izinleri şu şekilde sıfırlayabilirsiniz:

  • SharePoint Online: PowerShell kullanarak Liste veya Belge Kitaplığından Benzersiz İzinleri Silme
  • SharePoint Online: PowerShell kullanarak Belge Kitaplığındaki Tüm Klasörlerden Benzersiz İzinleri Kaldırma
  • SharePoint Online: PowerShell kullanarak Site Koleksiyonundaki Tüm Benzersiz İzinleri Sıfırlama

İlgili makaleler