J’ai été confronté à la demande suivante : sur un ensemble de site (des mysites en l’occurrence), un niveau d’autorisation personnalisé est défini par code lors de la création (Mysite Owner).
Une évolution a nécessité la modification de ce niveau d’autorisation pour ajouter la possibilité de créer des groupes.
La mise à jour du code créant le mysite est triviale, il aura suffi d’ajouter la permission. Mais qu’en est-il des sites déjà créés ?
La solution est assez simple. Le script Powershell suivant remplira ce rôle :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Param( [Parameter(Mandatory=$true)] [string]$url ) Add-PSSnapin Microsoft.SharePoint.PowerShell -EA 0 $mySites = Get-SPSite -WebApplication $url -Limit All | ? { $_.RootWeb.WebTemplate -Match "SPSPERS" } $mySites | % { $site = new-object Microsoft.SharePoint.SPSite($_.Url) $web = $site.OpenWeb() $perm = $web.RoleDefinitions["MySite owner"] $current = [Microsoft.SharePoint.SPBasePermissions]$perm.BasePermissions if($perm.BasePermissions -Band [Microsoft.SharePoint.SPBasePermissions]::CreateGroups) { Write-Host "Not required for $_" } else { $perm.BasePermissions = $current -Bor [Microsoft.SharePoint.SPBasePermissions]::CreateGroups $perm.Update() Write-Host "Permission added for $_" -Foreground Green } $web.Dispose() $site.Dispose() } Write-Host "Press any key to exit" -NoNewLine Read-Host |
Ce script attend en entrée l’url de l’application Web hébergeant les sites mysites. Il va ensuite énumérer les collections de site de type mysite (template « SPSPERS »).
Il ajoute enfin, si nécessaire, la nouvelle permission.
[?]