février
2009
Mon petit problème de la semaine en SharePoint a été le suivant…
A 9h du matin, le lundi, un ensemble d’utilisateurs a…change de groupe AD…
Attention, leur groupe AD n’a pas été renommé, mais pour des raisons d’organisation, ces utilisateurs ont été bougés d’un groupe AD a l’autre. Or, ce groupe AD avait la responsabilité d’administrer n sites Sharepoint…joie
Ma mission, que je n’avais pas d’autre choix que d’accepter, a donc été de supprimer le groupe précédent du groupe défini comme owner des sites, et de le remplacer par un autre groupe…sur une cinquantaine de sites…
Ma matinée de Lundi a donc été consacrée a gribouiller ce petit script, si cela peut aider quelqu’un, un jour
L’idée est la suivante, dans un premier temps, on ouvre le Web correspondant au Site principal (et avec un using, SVP…), et on cherche le SPUser correspondant au groupe (que l’on passe par ligne de commande, réusabilité oblige…)
SPUser userToRemove = FindUserFromLogin(args[1], parentWeb);
SPUser userToAdd = FindUserFromLogin(args[2], parentWeb);
Le FindUserFromLogin est une petite routine maison, pour retrouver un SPUser depuis un login…ca coute pas cher
foreach (SPUser user in web.SiteUsers) {
if (user.LoginName.Equals(userLogin, StringComparison.InvariantCultureIgnoreCase)) {
return user;
}
}
return null;
}
Et après, pour chaque web dans le site, on va chercher le groupe des propriétaires du site, que l’on trouvera dans la propriété vti_associateownergroup
int groupId;
if (int.TryParse(web.Properties[« vti_associateownergroup »], out groupId)) {
On notera le TryParse (on sait jamais )
Une fois qu’on a le groupe, on regarde si l’utilisateur à supprimer existe :
test = group.Users.GetByID(userToRemove.ID);
} catch {
Console.WriteLine(« user : « + userToRemove.Name
+ » was not found in web : » + web.Name);
}
Berkk…pas trouvé de méthode plus propre, en dehors d’itérer sur tous les utilisateurs, ce qui ne me plaisait pas non plus…
Et enfin, il n’y a plus qu’à ajouter le nouvel utilisateur, à enlever le vieux, et à mettre le groupe a jour.
Console.WriteLine(« Adding user »);
if (userToAdd != null) {
group.AddUser(userToAdd);
} else {
group.AddUser(args[2], « », « », « »);
}
Console.WriteLine(« Removing user »);
group.RemoveUser(userToRemove);
group.Update();
Console.WriteLine(« user : « + userToRemove.Name
+ » was replaced by user : « + userToAdd.Name + » in web : » + web.Name);
}
comme quoi, le bonheur, c’est simple comme un coup d’API
Si il y’avait une meilleure solution (oui, je sais, on aurait du avoir un groupe d’administration décorrélé de l’active directory…), n’hésitez pas a m’en faire part, j’aime bien avoir tort, ca permets de progresser
Articles récents
Archives
- janvier 2014
- septembre 2013
- août 2013
- mai 2013
- avril 2013
- janvier 2013
- août 2012
- juin 2012
- mai 2012
- avril 2012
- mars 2012
- novembre 2011
- septembre 2011
- août 2011
- juillet 2011
- juin 2011
- mai 2011
- avril 2011
- février 2011
- janvier 2011
- novembre 2010
- octobre 2010
- septembre 2010
- août 2010
- juillet 2010
- juin 2010
- mai 2010
- avril 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- juin 2009
- mai 2009
- avril 2009
- mars 2009
- février 2009
- janvier 2009