Sunday, November 15, 2015

Get and Set User Profile Properties using Console Application in SharePoint Online

Get and Set User Profile Properties using Console Application in SharePoint Online
File -> New -> Project -> Installed -> Templates -> Visual C# -> Windows -> Console Application ->Enter Name (UserProfilePropertySync)
Go to UserProfilePropertySync -> References -> Add Referece

Add below three dlls. Make sure add 16 version dlls.
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.Runtime;
using Microsoft.SharePoint.Client.UserProfiles;
Make sure here we are adding 16th version dlls.
Go to UserProfilePropertySync -> Open Program.cs
add below code
-------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security;
using System.Net;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.UserProfiles;
namespace UserProfilePropertySync
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string tenantAdminUrl = GetString("Enter your tenant admin url (https://tenantname-admin.sharepoint.com): ");
                string tenantAdminUser = GetString("Enter your tenant admin user (user@tenantname.onmicrosoft.com): ");
                PersonProperties personProperties = null;
                SecureString tenantAdminPassword = GetPassword();
                string userToUpdate = "i:0#.f|membership|" + tenantAdminUser;
                using (ClientContext clientContext = new ClientContext(tenantAdminUrl))
                {
                    clientContext.Credentials = new SharePointOnlineCredentials(tenantAdminUser, tenantAdminPassword);
                    PeopleManager peopleManager = new PeopleManager(clientContext);
                    string userProfileProperty = "AboutMe";
                    personProperties = peopleManager.GetPropertiesFor(userToUpdate);
                    clientContext.Load(personProperties, p => p.UserProfileProperties);
                    clientContext.ExecuteQuery();
                    foreach (var property in personProperties.UserProfileProperties)
                    {
                        if (property.Key == userProfileProperty)
                            Console.WriteLine("Current value of the {0} property for user {1}:{2}", userProfileProperty, userToUpdate, property.Value.ToString());
                    }
                    string newAboutMeValue = GetString(String.Format("Enter a new value to be set for property {0}:", userProfileProperty));
                    Console.WriteLine("Setting new value...");
                    peopleManager.SetSingleValueProfileProperty(userToUpdate, userProfileProperty, newAboutMeValue);
                    personProperties = peopleManager.GetPropertiesFor(userToUpdate);
                    clientContext.Load(personProperties, p => p.UserProfileProperties);
                    clientContext.ExecuteQuery();
                    foreach (var property in personProperties.UserProfileProperties)
                    {
                        if (property.Key == userProfileProperty)
                        {
                            Console.WriteLine("Current value of the {0} property for user {1}:{2}", userProfileProperty, userToUpdate, property.Value.ToString());
                        }
                    }
                }
                Console.WriteLine("Press any key to continue.");
                Console.Read();
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(string.Format("Exception!"), ex.ToString());
                Console.WriteLine("Press any key to continue.");
                Console.Read();
                throw;
            }
        }
        public static string GetString(string question)
        {
            string userInput = string.Empty;
            try
            {
                Console.Write(question);
                userInput = Console.ReadLine();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                userInput = string.Empty;
            }
            return userInput;
        }
        public static SecureString GetPassword()
        {
            SecureString sStrPwd = new SecureString();
            try
            {
                Console.Write("Enter the SharePoint Tenant Admin password: ");
                for (ConsoleKeyInfo keyInfo = Console.ReadKey(true); keyInfo.Key != ConsoleKey.Enter; keyInfo = Console.ReadKey(true))
                {
                    if (keyInfo.Key == ConsoleKey.Backspace)
                    {
                        if (sStrPwd.Length > 0)
                        {
                            sStrPwd.RemoveAt(sStrPwd.Length - 1);
                            Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop);
                            Console.Write(" ");
                            Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop);
                        }
                    }
                    else if (keyInfo.Key != ConsoleKey.Enter)
                    {
                        Console.Write("*");
                        sStrPwd.AppendChar(keyInfo.KeyChar);
                    }
                }
                Console.WriteLine("");
            }
            catch (Exception e)
            {
                sStrPwd = null;
                Console.WriteLine(e.Message);
            }
            return sStrPwd;
        } 
    }
}
-------------------------------------------------------------
Press F5 to run and enter required input.

No comments:

Post a Comment

Featured Post

SharePoint Edit Control Block (ECB) menu or Custom Action Menu In ListItem and Site

 SharePoint Edit Control Block (ECB) menu or Custom Action Menu In ListItem and Site: < script   language = "javascript"   type...

Popular posts