Import des photos dans les profils SharePoint 2010


SharePoint 2010 comme 2007 d’ailleurs permet d’identifier les utilisateurs grâce à une photo. Celle-ci est inscrite dans le profil de l’utilisateur.

Beaucoup d’entreprises disposent d’une base de photos des utilisateurs. Il est donc intéressant de pouvoir faire un import en masse de ces photos dans les profils SharePoint.

Le but de cet article, vous l’aurez compris, sera de mettre à jour les profils des utilisateurs via un script.

Alors c’est parti !

Créer un fichier texte mais avec l’extension .ps1 (Powershell)

Copier/coller le texte ci-dessous dans votre fichier. Vous pouvez également télécharger le script depuis le lien fourni en bas de page.

#---------------------------------------------------------------------------------
# Default Values
#---------------------------------------------------------------------------------
$spNotFoundMsg = "Unable to connect to SharePoint.  Please verify that the site '$PortalURL' is hosted on the local machine.";
#-----------------------------------------------------# Load Assemblies
#-----------------------------------------------------
if ([Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") -eq $null)		{ throw $spNotFoundMsg; }
if ([Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server") -eq $null)	{ throw $spNotFoundMsg; }#-----------------------------------------------------

# Functions
#-----------------------------------------------------
function ToSimpleString([string]$value, [bool]$trim = $true, [bool]$removeSpaces = $true, [bool]$toLower = $true)
{
	if ($value -eq $null) {
		return [System.String]::Empty; }
	if ($trim)
	{
		$value = $value.Trim();
	}
	if ($removeSpaces)
	{
		$value = $value.Replace(" ", "");
	}
	if ($toLower)
	{
		$value = $value.ToLower();
	}
	return $value;
}

function GetSPSite($url)
{
	[Microsoft.SharePoint.SPSite]$site = New-Object "Microsoft.SharePoint.SPSite" -ArgumentList $url
	return $site;
}

function GetSpContext($url)
{
	[Microsoft.SharePoint.SPSite]$site = GetSPSite -url $url
	return [Microsoft.Office.Server.ServerContext]::GetContext($site);
}

function GetProfileManager($url)
{
	[Microsoft.Office.Server.ServerContext]$ctx = GetSpContext -url $url
	[Microsoft.Office.Server.UserProfiles.UserProfileManager]$upm = New-Object "Microsoft.Office.Server.UserProfiles.UserProfileManager" -ArgumentList $ctx
	return $upm;
}
function GetProfilePropertyName($userProfileManager, $propertyName)
{
	$propertyName = (ToSimpleString -value $propertyName);
	$propertyName = $propertyName.Replace("sps-", "");
	foreach($prop in $userProfileManager.Properties)
	{
		[string]$n = (ToSimpleString -value $prop.DisplayName);
		$n = $n.Replace("sps-", "");
		if ($propertyName -eq $n) {
			return $prop.Name.ToString(); }
		$n = (ToSimpleString -value $prop.Name);
		$n = $n.Replace("sps-", "");
		if ($propertyName -eq $n) {
			return $prop.Name.ToString(); }
	}
	return $null;
}

function Set-UserPictures([string] $PortalURL, [string] $UserFile, [string] $Domain )
{
	Import-Csv $UserFile | foreach-object {
		$upm = GetProfileManager -url $PortalURL;
		$name=$Domain + "\" + $_.LoginName;
		Write-Host $name;
		$up = $upm.GetUserProfile($name);
		$picturePropertyName = GetProfilePropertyName -UserProfileManager $upm -PropertyName "PictureUrl";

		if (-not [System.String]::IsNullOrEmpty($picturePropertyName))

		{
			$PortraitUrl = $PortalURL + $_.Picture;
			Write-Host $PortraitUrl;
			$up[$picturePropertyName].Value = $PortraitUrl;
			$up.Commit();
		}
	}
}

Le principe du script est relativement simple, à partir d’un fichier CSV contenant le login de l’utilisateur et le nom de la photo correspondante, le script va chercher la fiche profil de l’utilisateur.
Puis récupérer la propriété correspondant à l’image du profil.
Enfin, il écrit le chemin où se trouve les photos dans la propriété de profil.
Le tour est joué.

Donc vous allez avoir besoin d’un fichier CSV de la forme :

 LoginName,Picture
 dnoblet,dnoblet.jpg
 cdurand,cdurand.jpg
 

Il est nécessaire de stocker toutes les images dans un lieu accessible du serveur SharePoint.
Quoi de mieux me direz vous, qu’une bibliothèque d’images !

Ajouter l’ensemble de vos images dans cette bibliothèque, le stockage est temporaire.

Maintenant l’appel à la fonction, cette ligne est à ajouter à la fin du fichier.

Set-UserPictures "http://sharepoint/PublishingImages/" "users.csv" "DOMAIN"

3 arguments :

  • Le chemin de la bibliothèque où se trouve les images.
  • Le nom du fichier CSV (chemin ci celui-ci n’est pas dans le répertoire que le script).
  • Le nom de domaine des utilisateurs.

Je lance le SharePoint 2010 Management Shell et lance l’exécution du script.

Le script indique pour chaque ligne du CSV le nom de login de l’utilisateur et le chemin complet vers l’image.

Il est possible de vérifier le bon fonctionnement en allant éditer la fiche profil des utilisateurs.

Rendez-vous pour cela dans l’application de service de profil utilisateur accessible depuis la centrale d’administration.

Cliquer sur le lien « Gérer les profils utilisateurs ».

Rechercher la fiche profil d’un utilisateur et vérifier que l’image est bien en place.

Oops la photo n’est pas retaillée, le travail n’est donc pas terminé.

Lancer la commande suivante, toujours dans le PowerShell :

Update-SPProfilePhotoStore -MySiteHostLocation "http://my/"
Où « http://my » est l’hôte de site monsite
Cette commande va établir 3 images pour chaque profil. Et va les stocker dans la bibliothèque « Photos de l’utilisateur » du MySite.
Bien sur les profils des utilisateurs sont modifiés pour utiliser l’image dans le format adéquat.
Vous savez maintenant comment effectuer un import en masse des photos des utilisateurs dans SharePoint 2010.
Sources:
Note : il est possible que l’invite PowerShell n’autorise pas l’exécution du script, dans ce cas modifier la politique de sécurité en lançant la commande : Set-ExecutionPolicy -ExecutionPolicy unrestricted
kOuilb
Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :