In this tutorial, we will discuss the SharePoint user information list. What is a user information list in SharePoint? How to retrieve the user information list from the browser? How to get user information list by using the server object model URL? How to retrieve user information fields using the server object model?
Most of us know that SharePoint has many hidden lists to perform various tasks. Now we are doing deep dive on the “users” list. This list is one of the important lists that exists at the site collection level. The hidden Users list was there from MOSS onwards and you can see this list even in SharePoint 2016 also.
Note: This list can be accessed by only Site Collection administrators and FARM administrators.
SharePoint User Information List
Now, let us understand what is a user information list in SharePoint?
The “User Information List” in SharePoint stores the information about a user with some metadata configured/added to the user as part of Active Directory (AD) like user Picture, DisplayName, and Login Name (domain\user-id) e.t.c.
The SharePoint user information list is a hidden list and is only visible to SharePoint administrators. The list is available in SharePoint 2013, SharePoint 2016, and guess in SharePoint 2019 and SharePoint Online also.
How SharePoint User Information List gets data?
As soon as you add/grant access to a user at subsite/ Site Collection level SharePoint added a new entry in this list with the latest information of that user from AD.
In precise if there is any change in user details especially in user-email (or) user role SharePoint adds one more new entry in this list as there is a change in user’s metadata. So, sometimes we end up finding more than one entry for one user.
How to access User Information List in UI?
The SharePoint User Information List can be accessed via the browser by navigating to “/_catalogs/users/simple.aspx” from your site.
Ex: http://contoso.com/_catalogs/users/simple.aspx
You can see a screenshot of SharePoint Online user information list for on of my SharePoint Online site.
Connect with User Information List using SharePoint Server-side Object Model
In SharePoint 2013/2016/2019, We can connect to this user information hidden list to get the user information for the required user. Please find the below code snippet for the same.
// Instantiates the User Information List
SPList userInformationList = SPContext.Current.Web.SiteUserInfoList;
// Get the current user
SPUser user = SPContext.Current.Web.EnsureUser(@"CONTOSO\krishna");
// The actual User Information is within this ListItem SPListItem userItem = userInformationList.Items.GetItemById(user.ID);
string pictureURL = userItem["Picture"].ToString();
With the above code snippet, you can get the picture URL of the SharePoint user. This clearly shows that reading information from this list is as same as any other list in SharePoint.
User Information List Fields
I would like to make our life easy, below is the code snippet to get all the fields and their internal names.
You can copy this code in a Console application to see the results.
SPWeb spWeb = new SPSite(http://contoso.com/).OpenWeb();
SPUser user = spWeb.ensureUser(@"CONTOSO\krishna");
SPListItem item = spWeb.SiteUserInfoList.Items.GetItemById(user.ID);
Foreach(SPField objfld in item.Fields)
{
Console.WriteLine("Field Name:: {0}, Field Internal Name :: {1}",objfld.title,objfld.InternalName);
}
User Information List in SharePoint 2010
Now, we can see the user information list in SharePoint 2010.
User Information List is a hidden list maintained by SharePoint 2010 to stores and maintains a user information profile for authenticated users at the site collection level. A user also can update the profile information from the My Settings link. So for a particular user, there will be only one user profile information across all the sites in the site collection.
The information may be like email, displayname, loginname etc.
You can see the list from the below URL
http://[sitecollection]/_catalogs/users/simple.aspx
or
http://[sitecollection]/_catalogs/users/details.aspx
You can also use the SharePoint 2010 object model to access user information list by using the SPList class like below:
SPList userInformationList = SPContext.Current.Web.SiteUserInfoList;
But if you are using SharePoint Server and you have configured User Profile Service application to import profiles, in that case, the information are copied from User Profile to User Information List by two timer jobs “User Profile to SharePoint Full Synchronization” and “User Profile to SharePoint Quick Synchronization”. Here your profile information can be updated from the Active Directory or from My site feature.
Enable SharePoint User Information List
There are different ways, we can enable sharepoint user information list. By using a browser, SharePoint server object model, csom (client object model), and PowerShell.
Access User Information List via Browser
You can access the user information list through the browser by navigating to >> /_catalogs/users/simple.aspx
Ex. http://win-eqalhem27jl:7575/sites/one/_catalogs/users/simple.aspx
When accessing the user information list through a browser the list doesn’t remain in the site contents, it stays there temporarily.
So here I have made an effort to make the user information list stay in the site contents permanently as long as we don’t hide it back.
Access user information list using SSOM (Server Side Object Model)
We can enable user information list using SharePoint 2013 server object model.
Code:
static void Main(string[] args)
{
var siteUrl = “http://win-eqalhem27jl:7575/sites/one/”;
using (SPSite site = new SPSite(siteUrl))
{
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists[“User Information List”];
list.Hidden = false;
list.Update();
}
}
}
Access user information list using CSOM (Client Side Object Model)
We can access user information list using client object model (csom) in SharePoint 2013/2016.
Code:
static void Main(string[] args)
{
var siteUrl = “http://win-eqalhem27jl:7575/sites/one/”;
using (ClientContext clientContext = new ClientContext(siteUrl))
{
NetworkCredential _myCredentials = new NetworkCredential(“administrator”, “[email protected]”);
clientContext.Credentials = _myCredentials;
Web web = clientContext.Web;
List list = web.Lists.GetByTitle(“User Information List”);
clientContext.Load(list);
list.Hidden = true;
list.Update();
clientContext.ExecuteQuery();
}
}
Enable user information list using PowerShell in SharePoint
We can also enable user information list using PowerShell in SharePoint 2013. We can use Windows PowerShell ISE.
Code.
$web = Get-SPWeb "http//siteURL";
$list = $web.Lists["User Information List"];
$list.Hidden = 0;
$list.OnQuickLaunch = $true;
$list.Update();
Final Output:
Note: When you enable the User Information List on the Site, the list is made available but the icon for the list is not found in the _Layouts.You can see in the above image I have highlighted the List. This is an issue with the User Information List in SharePoint 2013, yet it is possible to add a custom image on the list.
I found out that there is this image lsers.gif given as the icon for User Information List. But you can’t find this image in the IMAGES folder inside the 15 hive folder. Check the screenshot below.
PowerShell to clean up user information in SharePoint
As part of my SharePoint FARM cleanup, I had noticed that there are many user account hanging in SharePoint who are not part of organization anymore. The business user had an escalation about populating nonexisting users while sharing sites / adding new users to the site.
To be more precise I have the user name “Raghava P” as part of members group but the same user is not part of AD users (as shown in below screenshots).
User existence in the members group
This is only for one site collection and one user I can’ ask the admin to navigate each and every site collection and delete the non-existed users.
Where does this user exist?
The strange doubt/question in this scenario from where this user is getting populated? In SharePoint as soon as you add a user with some permission the user will be added to a hidden list http://sharepoint13:12345/_catalogs/users/simple.aspx. That is why Microsoft is suggesting to add users from AD groups.
PowerShell to clean up user information in SharePoint 2013/2016
I have implemented the below PowerShell solution to clean the non-existed users across the SharePoint site collections.
The beauty of this script is! It read through a CSV file and delete all the users listed in that CSV file across all the site collections of a FARM.
([Parameter(Mandatory=$true)][ValidateScript({Test-Path $_ -Include "*.csv"})][String]$CSVPath)
#This script will remove users specified in the CSV.
$CSVFile = Import-CSV $CSVPath
Add-PSSnapin Microsoft.SharePoint.PowerShell -EA SilentlyContinue
#Get all site collections
$objSites = Get-SPSite -Limit All
$objAllSites = @()
foreach($objUser in $CSVFile)
{
foreach($objSites in $objSites)
{
#Get the rootweb for the site collection
$RootWeb = $objSites.RootWeb
If([bool](Get-SPUser $objUser.Username -Web $RootWeb -EA SilentlyContinue) -eq $True)
{
#Remove the user from the User Information List
Remove-SPUser -Identity $objUser.username -Web $RootWeb -Confirm:$False
$objAllSites += $RootWeb.Url
}
}
if(!($objAllSites).count -eq 0)
{
#Give feedback on deleted users
Write-Host "Removed user $($objUser.username) from:" -Fore "Magenta"
foreach($S in $objAllSites){Write-Host "- $S"}
Write-Host ""
$objAllSites = @()
}
}
The output will be:
Input file format:
You may like following SharePoint tutorials:
- Create and Manage Task List in SharePoint
- Copy list items from one site collection to another programmatically using CSOM in SharePoint Online
- Get Sites, Web, and List information from SharePoint Online site using PowerShell
- Different ways to Retrieve logged in user details in SharePoint 2013/2016/Online
- SharePoint 2016 User Profile Service Application (UPSA) configuration step by step tutorial
- SharePoint 2016 crud operations using Rest API and jQuery on list or document library
- Change list or library URL in SharePoint 2013/2016
- Steps to add items from CSV file to SharePoint Online List using PowerShell in CSOM
In this SharePoint tutorial, we learned What is a User Information List in SharePoint 2013? How to access the User Information List in UI? How to connect with user information list using SharePoint Server-side Object Model. And also, we saw, how to get all the fields of the User Information List.
I am Krishna.Vandanapu a SharePoint architect working in IT from last 13+ years, I worked in SharePoint 2007, 2010, 2013, 2016 and Office 365. I have extensive hands on experience in customizing SharePoint sites from end to end. Expertise in SharePoint migration tools like Sharegate, Doc Ave and Metalogix. Migrated SharePoint sites from SharePoint 2007 to 2010 and 2010 to 2013 several times seamlessly. Implementing CSOM with Microsoft best practices. Spent quality time in configuring SharePoint application services like User Profile, Search, Managed Meta data services etc. Now exploring SharePoint Framework and SharePoint 2019
You are great at stealing content from others.
Well done.
This was very helpful – not what I need today, but will reference it later/as needed. Thank you!