Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SharePoint et plus...

Les technologies de développement Web Microsoft en français dans le texte.
[SharePoint 2010] Automatiser la mise à jour des photos de profils utilisateurs avec PowerShell
Première constatation: SharePoint 2010 est la dernière version de SharePoint à intégrer la ligne de commande STSADM pour son administration. En 2014, bye bye STSADM !!! Il est donc temps de commencer à regarder vers PowerShell pour voir a quel point l'administration de SharePoint peut être simplifiée avec les CmdLet spécialisées.

Deuxième constatation: Que ce soit pour l'implémentation des MySites en environnement de production ou à des fins de démo, il pourrait vous arriver d'avoir besoin de mettre à jour en masse les photos des profils utilisateurs de SharePoint Server 2010.


Mon idole utilise SharePoint !

Voici donc un petit tutorial permettant de réaliser cette tâche de façon automatisée avec PowerShell.

La première étape
consiste a retailler les photos pour qu'elles s'intègre parfaitement à l'affichage et ce dans tous les cas (My Profile, Organization Browser, ...):

Par défaut, lorsqu'un utilisateur uploade sa photo via le formulaire sur son site personnel, SharePoint génère automatiquement 3 miniatures de taille différentes. Ces photos sont sauvegardées dans la bibliothèque "User Photos" du site hôte des MySites dans un dossier "Profile Pictures".
Ces 3 photos seront donc retaillées en gardant la proportion. Pour chaque photos, le coté le plus grand (c'est à dire la largeur en mode paysage ou la hauteur en mode portrait) auront respectivement les tailles suivantes:

  • 144px pour la photo principale du profil sur le MySite,
  • 96px pour la photo de l'utilisateur sélectionné dans le navigateur hiérarchique Silverlight (Org Browser),
  • 32px pour les photos des utilisateurs de la hierarchie dans l'Org Browser.

L'idéal pour avoir une belle photo bien intégrée dans tous les cas étant de fournir des photos carrées avec une taille de coté supérieure ou égale à 144px.
Pour réaliser le retaillage de façon automatique sur un grand nombre de fichiers, vous pouvez utiliser des outils pros tel que PhotoShop ou un des multiples outils gratuits du net tel que: FotoSizer  ou FastStone Photo Resizer


La deuxième étape consiste à uploader les fichiers dans la bibliothèque "User Photos" du site hôte des MySites. Vous pouvez biensur le faire manuellement, mais c'est tellement pus fun de le faire via PowerShell !!!

Voici un exemple de code uploadant l'ensemble des fichiers d'un dossier:

$mysiteurl = "http://sharepoint/my/"
$web = Get-SPWeb $mysiteurl
$folder = $web.GetFolder("User Photos")
$spfiles = $folder.Files

$files = ls "Profiles Pictures - 200x200"
foreach($f in $files) {
  $spfile = $spfiles.Add(“User Photos/$($f.Name)”,$f.OpenRead(),$true)
}

J'ouvre le Web avec la cmdlet Get-SPWeb puis je récupère dossier racine de la bibliothèque en lui passant le nom de celle-ci. Je peux ensuite récupérer la liste des fichiers du dossier avec la collection Files.
La cmdlet ls me permet de boucler sur l'ensemble des fichier du dossier en local. Puis j'utilise la méthode Add de SPFileCollection, qui possède une multitude de surcharges, pour ajouter/uploader le fichier. Dans ce cas, je passe à cette méthode le nom du fichier cible, la FileStream du contenu du fichier local,  et un booléen indiquant s'il faut ou non écraser le fichier existant.


La troisième étape consiste à faire le lien entre mes profils existants et mes photos tout juste uploadées:

Pour cela, j'ai décidé de nommer mes photos en respectant la nomenclature [login].jpg.
Voici un exemple de code bouclant sur l'ensemble des profils utilisateurs et modifiant la valeur du champ "PictureURL" en utilisant le login (AccountName) comme nom de fichier JPEG:

$mysiteurl = "http://sharepoint/my/"
$domain = "CONTOSO\\"
$site = Get-SPSite $mysiteurl
$context = Get-SPServiceContext $site
$ProfileManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($context)
$profiles = $ProfileManager.GetEnumerator()
foreach ($userProfile in $profiles) {
 $login =
$userProfile["AccountName"].Value
 $login = $login -replace $domain
 $url = $mysiteurl  + "User%20Photos/" + $login + ".jpg"
 $userProfile["PictureURL"].Value = $url
 $userProfile.Commit()
}

A ce moment de la procédure, vos profils ont effectivement une photo mais celle-ci a toujours sa taille d'origine et cela peut provoquer des soucis d'affichage, notamment sur l'OrgBrowser Silverlight qui ne resize pas automatiquement la photo:


La quatrième étape consiste donc à demander à SharePoint de générer les 3 miniatures aux tailles adéquates:

Pour cela, SharePoint propose une cmdlet magique qui va générer les 3 miniatures pour l'ensemble des profils utilisateurs et mettre à jour les propriétés du profil correspondantes.

Update-SPProfilePhotoStore –MySiteHostLocation "http://sharepoint/my/"


Et voila, vous savez tout pour mettre à jour rapidement et simplement les photos des profils utilisateurs SharePoint.
Je ne veux donc plus voir trainer une seule silhouette de Bill Gates Big Smile


Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: mercredi 20 avril 2011 16:50 par seb_moss2k7

Commentaires

Maximus prime a dit :

Salut merci pour avoir pensé à faire cela mais moi je suis nouveau sur powershell et je ne parvient pas à exécuter ton script. est ce que tu peux le détailler un peu et dire s'il y a des prérequis.

merci

# février 1, 2013 21:30
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Intégration Yammer et SharePoint Online (Office 365), étape 1 … par Le blog de Patrick [MVP SharePoint] le 06-12-2013, 17:37

- [Dynamics CRM] Ajouter les dossiers de CRM au dossier Favoris d’Outlook par Christine Dubois le 06-10-2013, 15:50

- Visual Studio 2013 par Etienne Margraff le 06-04-2013, 10:26

- Configurer la collation SQL Server pour SharePoint par Blog de Jérémy Jeanson le 06-03-2013, 19:48

- Etendre le Team Web Access de TFS 2012 – Step 1: Création du plugin par Philippe Didiergeorges Aka Philess le 06-03-2013, 07:30

- Livre Blanc : Développer des applications NUI par Fathi Bellahcene le 06-01-2013, 11:35

- [Dynamics CRM 2011] Copier une vue d'entité par Christine Dubois le 05-29-2013, 13:20

- [Conf’SharePoint 2013] Mes présentations… par Le blog de Patrick [MVP SharePoint] le 05-28-2013, 09:04

- [wpdev] Storage bug in MediaLibrary.SavePicture par Kévin Gosse le 05-26-2013, 19:08

- VMMap en mode instrumentation sur système 64bit : attention à la plateforme cible du build .NET par CoqBlog le 05-25-2013, 22:25