Zhaobab
2/11/2015 - 9:38 AM

Manage User Profile's properties order (list them and reorder them), from XML input.

Manage User Profile's properties order (list them and reorder them), from XML input.

<Configuration>
 <Properties>
  <Property Name="RBLAProjets" Order="5207" />
  <Property Name="RBLAProduits" Order="5208" />
  <Property Name="RBLAExpertise" Order="5209" />
  <Property Name="RBLARM" Order="5210" />
 </Properties>
</Configuration>
# ----------------------------------------------
# Author: Radu Tut / Romain Blanchard
# Date: 11.02.2015
# Description: Manage User Profile's properties order (list and reorder), from XML input.
# ----------------------------------------------

# Import assemblies
Add-PSSnapin Microsoft.Sharepoint.Powershell -ErrorAction SilentlyContinue
Add-Type -Path "C:\program files\common files\microsoft shared\web server extensions\15\isapi\Microsoft.Office.Server.dll"

## Functions ##

# List all User Profile's properties.
# Input parameter are MySite's url and Profile Sub-Type name
function ListUPPDisplayOrder($mysiteUrl){
    $mysite = Get-SPSite $mysiteUrl
    $context = Get-SPServiceContext $mysite
    $upcManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileConfigManager($context)
    $defaultUserProfileSubTypeName = [Microsoft.Office.Server.UserProfiles.ProfileSubtypeManager]::GetDefaultProfileName("User")
    $upcManager.ProfilePropertyManager.GetProfileSubtypeProperties($defaultUserProfileSubTypeName) | Format-Table -Property Name,DisplayName,DisplayOrder
}

# Reorder User Profile properties.
# Input parameters are XML configuration file path, MySite's url and Profile Sub-Type name
function UPPReorder($configFile, $mysiteUrl, $ProfileSubTypeName)
{
    $config = [xml] (Get-Content $configFile)
    $mys = Get-SPSite $mysiteUrl
    $context = Get-SPServiceContext $mys
    $upcManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileConfigManager($context)
    $defaultUserProfileSubTypeName = [Microsoft.Office.Server.UserProfiles.ProfileSubtypeManager]::GetDefaultProfileName("User")
    $profileSubtypePropManager = $upcManager.ProfilePropertyManager.GetProfileSubtypeProperties($defaultUserProfileSubTypeName)

    # Reorder properties
    foreach($property in $config.Configuration.Properties.childnodes)
    {
        $propName = $property.Name
        Write-Host "Updating property $propName ..."
        $profileSubtypePropManager.SetDisplayOrderByPropertyName($property.Name,$property.Order)
    }
    $profileSubtypePropManager.CommitDisplayOrder()
    Write-Host "Finished."
}

## Utilization ## 

#ListUPPDisplayOrder "http://rbla-sp2010-002/sites/mysite"
#UPPReorder "config.xml" "http://rbla-sp2010-002/sites/mysite"