SharePoint User Information List (Hidden List)

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 into the “users” list. This list is one of the important lists that exist 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 the user’s metadata. So, sometimes we end up finding more than one entry for one user.

See also  How to use content types in SharePoint online [SharePoint Online list content types]

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.

sharepoint user information list
sharepoint Online user information list

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 store 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.

See also  How to handle radio button checked and unchecked events using JavaScript and jQuery

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”, “admin@123”);
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();
enable user information list url
enable user information list url

Final Output:

enable user information list sharepoint
enable user information list sharepoint

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.

enable user information list sharepoint 2013
enable user information list sharepoint 2013

PowerShell to clean up user information in SharePoint

As part of my SharePoint FARM cleanup, I noticed that there are many user accounts hanging in SharePoint that are not part of the organization anymore. The business user had an escalation about populating nonexisting users while sharing sites / adding new users to the site.

See also  SharePoint Online Weather Web Part

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 the below screenshots).

user information list sharepoint online

User existence in the members group

sharepoint hidden user list

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 adding 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 deletes 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:

sharepoint 2016 orphaned users
sharepoint user information list

Input file format:

sharepoint online user information list

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.

You may like the following SharePoint tutorials:

  • >