Forum Discussion
ViriisXP
Jul 24, 2023Copper Contributor
Administrer les droits des dossiers partagés SPO via powershell
Bonjour,
Je dispose d'un SPO dans lequel des dossiers (et sous-dossiers) ont été disposés (actuellement aucun document présent à l'intérieur).
l'héritage des droits du SharePoint a été retiré car chaque dossier à la racine des "documents partagés" sera administré par un Groupe de Sécurité qui lui appartient.
Cependant, afin que l'arborescence des dossiers ne soit pas "malencontreusement" détruite par d'éventuelles erreurs humaines des membres de ces groupes, nous souhaitons que chaque dossier soit en lecture seule hormis chaque dernier dossier de l'arborescence.
(Grand-Parents en Lecture, Parent en Lecture, enfant en Lecture/ecriture en quelques sorte).
La quantité de dossier en place représente 6 414 dossiers ce qui, vous vous en doutez ne peux se faire à la main.
Je suis donc à la recherche de commande qui pourrait me permettre de faire cette action en powershell.
Pourriez-vous m'aider svp ?
En pj : un exemple de l'arborescence pour que ce soit plus ... parlant !
Merci beaucoup aux contributeurs
2 Replies
Sort By
- LeonPavesicSilver Contributor
Hi ViriisXP,
thanks for your question, I don't speak French so I will try to help you in English.To achieve the permission settings you described for your SharePoint Online (SPO) folders and subfolders using PowerShell (if I translated it properly), you can use the SharePoint Online Management Shell.
Before running the script, make sure you have installed the SharePoint Online Management Shell and connected to your SharePoint Online environment.
You can download SharePoint Online Management Shell here:
Download SharePoint Online Management Shell from Official Microsoft Download CenterHere's a PowerShell script that sets the permissions for each folder and its subfolders as you mentioned:
# Connect to SharePoint Online Connect-SPOService -Url https://yourtenantname-admin.sharepoint.com # Set the root URL of your document library $rootUrl = "https://yourtenantname.sharepoint.com/sites/sitename/Shared Documents" # Function to set folder permissions function Set-FolderPermissions { param ( [Microsoft.SharePoint.Client.Folder]$folder, [Microsoft.SharePoint.Client.RoleType]$permissionLevel ) $ctx = $folder.Context $folder.ListItemAllFields.BreakRoleInheritance($true, $false) $ctx.Load($folder.ListItemAllFields.RoleAssignments.Add($folder.ParentList.ParentWeb.SiteGroups.GetByName("YourReadOnlyGroup"), $permissionLevel)) $folder.Context.ExecuteQuery() } # Function to recursively set permissions for folders and subfolders function Set-PermissionsRecursively { param ( [Microsoft.SharePoint.Client.Folder]$folder ) $ctx = $folder.Context $ctx.Load($folder.Folders) $ctx.Load($folder.ListItemAllFields) $ctx.ExecuteQuery() # Set permission for the current folder Set-FolderPermissions -folder $folder -permissionLevel [Microsoft.SharePoint.Client.RoleType]::Read # Recursively set permissions for subfolders foreach ($subfolder in $folder.Folders) { Set-PermissionsRecursively -folder $subfolder } } # Main script $ctx = Get-SPOContext # Get the root folder $rootFolder = $ctx.Web.GetFolderByServerRelativeUrl($rootUrl) $ctx.Load($rootFolder) $ctx.ExecuteQuery() # Set permissions recursively for each folder and its subfolders Set-PermissionsRecursively -folder $rootFolder
You will need to modify the script by replacing `https://yourtenantname.sharepoint.com/sites/sitename/Shared Documents` with the actual URL of your document library. Also, replace `"YourReadOnlyGroup"` with the name of the security group that should have read-only access.
Please click Mark as Best Response & Like if my post helped you to solve your issue.
This will help others to find the correct solution easily. It also closes the item.If the post was useful in other ways, please consider giving it Like.
Kindest regards,
Leon Pavesic
- mlarrouyCopper Contributor
Bonjour LeonPavesic (désolé je réponds avec mon compte pro), il semblerait si je comprends bien, que chaque dossiers disposera des mêmes droit que son parent ?
Ce que je souhaite c'est que
- Si le dossier n'a plus de sous-dossier, alors les droits attribués sont "Modifier".
- Si le dossier a un sous-dossier, alors les droits attribués sont "Lecture" (+ recursive en effet) .
Si je reprends l'exemple de la capture :
S1 Lecture S1D1 Modification S1D2 Modification S1D3 Modification S1D4 Modification .... .... S2 Lecture S2D1 Lecture S2D1SSD1 Modification S2D1SSD2 Modification .... .... S2D1SSD5 Lecture S2D1SSD5E1 Modification S2D1SSD5E2 Modification ... ... Je suis vraiment désolé si je ne suis pas assez clair. 😕
Merci énormément pour l'aide ! Thx