Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Importante
Les compléments SharePoint ont atteint leur fin de vie dans SharePoint Online le 2 avril 2026. Les compléments hébergés par SharePoint et par le fournisseur sont mis hors service et ne fonctionnent plus dans SharePoint Online, y compris les clouds publics. Les instructions de développement, de déploiement et d’utilisation des compléments sont conservées à titre de référence historique et pour les scénarios SharePoint Server applicables, et non pour les nouvelles solutions SharePoint Online.
Les compléments SharePoint Server déployés via un catalogue d’applications local ne sont pas mis hors service par cette modification. L’acquisition de compléments SharePoint sur la place de marché publique a pris fin le 2 avril 2026 pour SharePoint Server.
Ce retrait ne met pas hors service les API REST SHAREPoint, CSOM, JSOM ou SharePoint Framework (SPFx). Pour SharePoint Online, utilisez SPFx pour les extensions d’interface utilisateur et Microsoft Entra ID pour l’authentification auprès des applications externes. Consultez l’annonce de mise hors service et les conseils sur la migration des compléments.
L’exemple Core.ProfileProperty.Migration vous montre comment migrer les données de profil utilisateur de SharePoint Server vers SharePoint Online.
Cet échantillon inclut deux applications console. Les deux utilisent le service web userprofileservice.asmx pour extraire des données de profil utilisateur à une ou plusieurs valeurs dans un fichier XML, et pour importer les données extraites dans le service de profil utilisateur dans SharePoint Online.
Utilisez cet exemple de code si vous souhaitez :
- Extraire les données de profil utilisateur dans SharePoint Server.
- Importez des données de profil utilisateur dans SharePoint Online.
Avant de commencer
Pour commencer, téléchargez l’exemple de complément Core.ProfileProperty.Migration à partir du projet Office 365 Developer Patterns and Practices sur GitHub.
Remarque
Le code dans cet article est fourni tel quel, sans garantie d’aucune sorte, expresse ou implicite, y compris mais sans s’y limiter, aucune garantie implicite d’adéquation à un usage particulier, à une qualité marchande ou une absence de contrefaçon.
L’exemple de code contient deux projets :
- Contoso.ProfileProperty.Migration.Extract
- Contoso.ProfileProperty.Migration.Import
projet Contoso.ProfileProperty.Migration.Extract
Étant donné que cet exemple de code utilise le modèle objet côté serveur, assurez-vous que vous exécutez le projet sur un serveur sur lequel SharePoint Server est installé.
- Utilisez un compte disposant des autorisations d’administrateur de batterie de serveurs SharePoint.
- Modifiez le fichier App.config à l’aide des informations de configuration répertoriées dans le tableau 1.
- Pour tous les utilisateurs, assurez-vous que la propriété de profil utilisateur de messagerie professionnelle n’est pas vide. Si la valeur de la propriété de profil utilisateur de messagerie professionnelle est vide, le processus d’extraction s’arrête prématurément.
Cet exemple de code extrait des profils utilisateur de SharePoint Server 2010. Si vous extrayez des profils utilisateur de SharePoint Server 2013, procédez comme suit :
Ouvrez le menu contextuel (clic droit) pour lespropriétésContoso.ProfileProperty.Migration.Extract>.
Sous Application, dans Framework cible, choisissez .NET Framework 4.
Choisissez Oui, puis Enregistrer.
Tableau 1. Paramètres de configuration d'App.config fichier
| Nom du paramètre de configuration | Description | Exemple |
|---|---|---|
| MYSITEHOSTURL | URL de Mon site sur la batterie de serveurs SharePoint Server source. | http://my.contoso.com |
| PROPERTYSEPARATOR | Caractère utilisé pour séparer plusieurs valeurs dans une propriété de profil utilisateur à valeurs multiples. | |
| USERPROFILESSTORE | Chemin d’accès au fichier XML à utiliser pour écrire les données de profil utilisateur extraites. | C:\temp\ProfileData.xml |
| FICHIER JOURNAL | Chemin d’accès au fichier XML à utiliser pour écrire les données de profil utilisateur extraites. | C:\temp\Extract.log |
| ENABLELOGGING | Active la journalisation sur disque. | Vrai |
| TESTRUN | Effectue une extraction de test pour confirmer que vos paramètres de configuration dans App.config sont corrects. | Définissez TESTRUN=true si vous effectuez un test d’extraction. La série de tests n’extrait qu’un seul utilisateur du service de profil utilisateur.Définissez cette option TESTRUN=false si vous extrayez tous les utilisateurs du service de profil utilisateur. |
Projet Contoso.ProfileProperty.Migration.Import
Vérifiez que les profils utilisateur existent dans Office 365.
Assurez-vous que l’adresse e-mail professionnelle de l’utilisateur est la même dans SharePoint Server local et le service de profil utilisateur d’Office 365.
Dans le fichier App.config, modifiez l’élément de valeur du paramètre Contoso_ProfileProperty_Migration_Import_UPSvc_UserProfileService pour inclure une référence au service de profil utilisateur dans votre centre d’administration SharePoint Online, comme illustré dans l’exemple suivant.
<applicationSettings> <Contoso.ProfileProperty.Migration.Import.Properties.Settings> <setting name="Contoso_ProfileProperty_Migration_Import_UPSvc_UserProfileService" serializeAs="String"> <value>https://contoso-admin.sharepoint.com/_vti_bin/userprofileservice.asmx</value> </setting> </Contoso.ProfileProperty.Migration.Import.Properties.Settings> </applicationSettings>Modifiez le fichier App.config à l’aide des paramètres de configuration répertoriés dans le tableau 2.
Tableau 2. App.config paramètres de configuration des fichiers
| Nom du paramètre de configuration | Description | Exemple |
|---|---|---|
| nom_locataire | Il s’agit du nom de votre client. | Si l’URL de votre locataire est http://contoso.onmicrosoft.com, entrez contoso comme nom de locataire. |
| PROPERTYSEPARATOR | Caractère utilisé pour séparer les valeurs dans une propriété de profil utilisateur à valeurs multiples. | |
| USERPROFILESSTORE | Fichier XML à utiliser pour lire les données de profil utilisateur extraites. | C:\temp\ProfileData.xml |
| FICHIER JOURNAL | Fichier journal utilisé pour la journalisation des événements. | C:\temp\Extract.log |
| ENABLELOGGING | Active la journalisation sur disque. | Vrai |
| SPOAdminUserName | Nom d’utilisateur d’un administrateur Office 365. | Non applicable |
| SPOAdminPassword | Mot de passe d’administrateur Office 365. | Non applicable |
Utilisation de l’exemple de complément Core.ProfileProperty.Migration
Cet exemple de code s’exécute comme une application console. Lorsque l’exemple de code s’exécute, la fonction Main dans Program.cs effectue les tâches suivantes :
- Se connecte à l’hôte Mon site et utilise UserProfileManager pour se connecter au service de profil utilisateur. UserProfileManager appartient à l’assemblyMicrosoft.Office.Server.UserProfiles.dll .
- Crée une liste appelée pData pour stocker les données de profil utilisateur extraites.
- Pour tous les utilisateurs du service de profil utilisateur, cela fait ce qui suit :
- Utilise GetSingleValuedProperty pour copier les propriétés de profil utilisateur WorkEmail et AboutMe vers un objet UserProfileData appelé userData.
- Utilise GetMultiValuedProperty pour copier la propriété de profil utilisateur SPS-Responsibility vers userData.
- Utilise UserProfileCollection.Save pour sérialiser userData dans un fichier XML. Le fichier XML est enregistré dans le chemin d’accès que vous avez spécifié dans App.config.
static void Main(string[] args)
{
int userCount = 1;
try
{
if (Convert.ToBoolean(ConfigurationManager.AppSettings["TESTRUN"]))
{
LogMessage(string.Format("******** RUNNING IN TEST RUN MODE **********"), LogLevel.Debug);
}
LogMessage(string.Format("Connecting to My Site host: '{0}'...", ConfigurationManager.AppSettings["MYSITEHOSTURL"]), LogLevel.Info);
using (SPSite mySite = new SPSite(ConfigurationManager.AppSettings["MYSITEHOSTURL"]))
{
LogMessage(string.Format("Connecting to My Site host: '{0}'...Done!", ConfigurationManager.AppSettings["MYSITEHOSTURL"]), LogLevel.Info);
LogMessage(string.Format("getting Service Context..."), LogLevel.Info);
SPServiceContext svcContext = SPServiceContext.GetContext(mySite);
LogMessage(string.Format("getting Service Context...Done!"), LogLevel.Info);
LogMessage(string.Format("Connecting to Profile Manager..."), LogLevel.Info);
UserProfileManager profileManager = new UserProfileManager(svcContext);
LogMessage(string.Format("Connecting to Profile Manager...Done!"), LogLevel.Info);
// Size of the List is set to the number of profiles.
List<UserProfileData> pData = new List<UserProfileData>(Convert.ToInt32(profileManager.Count));
// Initialize Serialization Class.
UserProfileCollection ups = new UserProfileCollection();
foreach (UserProfile spUser in profileManager)
{
// Get profile information.
LogMessage(string.Format("processing user '{0}' of {1}...", userCount,profileManager.Count),LogLevel.Info);
UserProfileData userData = new UserProfileData();
userData.UserName = GetSingleValuedProperty(spUser, "WorkEmail");
if (userData.UserName != string.Empty)
{
userData.AboutMe = GetSingleValuedProperty(spUser, "AboutMe");
userData.AskMeAbout = GetMultiValuedProperty(spUser, "SPS-Responsibility");
pData.Add(userData);
// Add to Serialization Class List of Profiles.
ups.ProfileData = pData;
}
LogMessage(string.Format("processing user '{0}' of {1}...Done!", userCount++, profileManager.Count), LogLevel.Info);
// Only process the first item if we are in test mode.
if (Convert.ToBoolean(ConfigurationManager.AppSettings["TESTRUN"]))
{
break;
}
}
// Serialize profiles to disk.
ups.Save();
}
}
catch(Exception ex)
{
LogMessage("Exception trying to get profile properties:\n" + ex.Message, LogLevel.Error);
}
La méthode GetSingleValuedProperty utilise userprofileservice.asmx pour récupérer une propriété de profil utilisateur à valeur unique. GetSingleValuedProperty effectue les opérations suivantes, comme illustré dans l’exemple de code suivant :
- Obtient l’objet property pour extraire les données à l’aide de spuser[userProperty].
- Retourne la première valeur de UserProfileValueCollection si la valeur n’est pas Null.
private static string GetSingleValuedProperty(UserProfile spUser,string userProperty)
{
string returnString = string.Empty;
try
{
UserProfileValueCollection propCollection = spUser[userProperty];
if (propCollection[0] != null)
{
returnString = propCollection[0].ToString();
}
else
{
LogMessage(string.Format("User '{0}' does not have a value in property '{1}'", spUser.DisplayName, userProperty), LogLevel.Warning);
}
}
catch
{
LogMessage(string.Format("User '{0}' does not have a value in property '{1}'", spUser.DisplayName, userProperty), LogLevel.Warning);
}
return returnString;
}
La méthode GetMultiValuedProperty utilise userprofileservice.asmx pour récupérer une propriété de profil utilisateur à valeurs multiples. GetMultiValuedProperty effectue les opérations suivantes, comme illustré dans l’exemple de code suivant :
- Récupère l’objet de propriété de profil utilisateur à mettre à jour à l’aide de spuser[userProperty].
- Crée une chaîne de valeurs de propriété de profil utilisateur séparées par le séparateur de propriétés spécifié dans le fichier App.config.
private static string GetMultiValuedProperty(UserProfile spUser, string userProperty)
{
StringBuilder sb = new StringBuilder("");
string separator = ConfigurationManager.AppSettings["PROPERTYSEPARATOR"];
string returnString = string.Empty;
try
{
UserProfileValueCollection propCollection = spUser[userProperty];
if (propCollection.Count > 1)
{
for (int i = 0; i < propCollection.Count; i++)
{
if (i == propCollection.Count - 1) { separator = ""; }
sb.AppendFormat("{0}{1}", propCollection[i], separator);
}
}
else if (propCollection.Count == 1)
{
sb.AppendFormat("{0}", propCollection[0]);
}
}
catch
{
LogMessage(string.Format("User '{0}' does not have a value in property '{1}'", spUser.DisplayName, userProperty), LogLevel.Warning);
}
return sb.ToString();
}
Utilisation du complément d’exemple Contoso.ProfileProperty.Migration.Import
Cet exemple de code s’exécute comme une application console. Lorsque l’exemple de code s’exécute, la méthode Main de Program.cs effectue les opérations suivantes :
- Initialise l’application console à l’aide de InitializeConfiguration et InitializeWebService.
- Désérialise le fichier XML contenant les données de profil utilisateur extraites.
- Pour tous les utilisateurs du fichier XML, ce qui suit :
- Extrait la propriété UserName du fichier XML.
- Utilise SetSingleMVProfileProperty pour définir SPS-Responsibility sur le profil de l’utilisateur.
- Utilise SetSingleMVProfileProperty pour définir AboutMe sur le profil de l’utilisateur.
InitializeWebService se connecte à SharePoint Online et définit une référence du service de profil utilisateur à une variable d’instance. Les autres méthodes de cet exemple de code utilisent cette variable d’instance pour écrire des valeurs dans les propriétés de profil utilisateur. Pour administrer le profil utilisateur, cet exemple de code utilise le service web userprofileservice.asmx sur le Centre d’administration SharePoint Online.
static bool InitializeWebService()
{
try
{
string webServiceExt = "_vti_bin/userprofileservice.asmx";
string adminWebServiceUrl = string.Empty;
if (_profileSiteUrl.EndsWith("/"))
adminWebServiceUrl = _profileSiteUrl + webServiceExt;
else
adminWebServiceUrl = _profileSiteUrl + "/" + webServiceExt;
LogMessage("Initializing SPO web service " + adminWebServiceUrl, LogLevel.Information);
SecureString securePassword = GetSecurePassword(_sPoAuthPasword);
SharePointOnlineCredentials onlineCred = new SharePointOnlineCredentials(_sPoAuthUserName, securePassword);
string authCookie = onlineCred.GetAuthenticationCookie(new Uri(_profileSiteUrl));
CookieContainer authContainer = new CookieContainer();
authContainer.SetCookies(new Uri(_profileSiteUrl), authCookie);
// Setting up the user profile web service.
_userProfileService = new UPSvc.UserProfileService();
_userProfileService.Url = adminWebServiceUrl;
// Assign previously created auth container to admin profile web service.
_userProfileService.CookieContainer = authContainer;
return true;
}
catch (Exception ex)
{
LogMessage("Error initiating connection to profile web service in SPO " + ex.Message, LogLevel.Error);
return false;
}
}
La méthode SetSingleMVProfileProperty définit une propriété de profil utilisateur à plusieurs valeurs, telle que SPS-Responsibility, en procédant comme suit :
Fractionnement de PropertyValue en un tableau de chaînes appelé arrs pour stocker les valeurs de propriété de profil utilisateur. La chaîne est fractionnée à l’aide du paramètre de configuration PROPERTYSEPARATOR spécifié dans App.config.
Affectation des valeurs de arrs à un tableau ValueData sur le service de profil utilisateur.
Création d’un tableau PropertyData sur le service de profil utilisateur. Le nom de la propriété de profil utilisateur et le tableau ValueData sont transmis aux propriétés de l’objet PropertyData . Ce tableau n’a qu’un seul élément, car une seule propriété de profil utilisateur à valeurs multiples sera importée.
Les données sont écrites dans le service de profil utilisateur à l’aide de ModifyUserPropertyByAccountName sur le service web userprofileservice.asmx du centre d’administration SharePoint Online. L’utilisateur qui exécute cet exemple de code doit être un administrateur Office 365.
static void SetSingleMVProfileProperty(string UserName, string PropertyName, string PropertyValue)
{
try
{
string[] arrs = PropertyValue.Split(ConfigurationManager.AppSettings["PROPERTYSEPARATOR"][0]);
UPSvc.ValueData[] vd = new UPSvc.ValueData[arrs.Count()];
for (int i=0;i<=arrs.Count()-1;i++)
{
vd[i] = new UPSvc.ValueData();
vd[i].Value = arrs[i];
}
UPSvc.PropertyData[] data = new UPSvc.PropertyData[1];
data[0] = new UPSvc.PropertyData();
data[0].Name = PropertyName;
data[0].IsValueChanged = true;
data[0].Values = vd;
_userProfileService.ModifyUserPropertyByAccountName(string.Format(@"i:0#.f|membership|{0}", UserName), data);
}
catch (Exception ex)
{
LogMessage("Exception trying to update profile property " + PropertyName + " for user " + UserName + "\n" + ex.Message, LogLevel.Error);
}
}
La méthode SetSingleValuedProperty définit des propriétés de profil utilisateur à valeur unique, telles que AboutMe. SetSingleValuedProperty implémente la même technique que SetSingleMVProfileProperty, mais utilise un tableau ValueData avec un seul élément.
static void SetSingleProfileProperty(string UserName, string PropertyName, string PropertyValue)
{
try
{
UPSvc.PropertyData[] data = new UPSvc.PropertyData[1];
data[0] = new UPSvc.PropertyData();
data[0].Name = PropertyName;
data[0].IsValueChanged = true;
data[0].Values = new UPSvc.ValueData[1];
data[0].Values[0] = new UPSvc.ValueData();
data[0].Values[0].Value = PropertyValue;
_userProfileService.ModifyUserPropertyByAccountName(UserName, data);
}
catch (Exception ex)
{
LogMessage("Exception trying to update profile property " + PropertyName + " for user " + UserName + "\n" + ex.Message, LogLevel.Error);
}
}