PowerShell script to create a new User Profile Property
#Load SharePoint User Profile assemblies
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server.UserProfiles")
#Function to get service context
function Get-SPServiceContext([Microsoft.SharePoint.Administration.SPServiceApplication]
$profileApp)
{
$profileApp = @(Get-SPServiceApplication | ?
{$_.TypeName -eq "User Profile Service Application"})[0]
return [Microsoft.SharePoint.SPServiceContext]::GetContext
($profileApp.ServiceApplicationProxyGroup,
[Microsoft.SharePoint.SPSiteSubscriptionIdentifier]::Default)
}
#Get UserProfileManager
$serviceContext = Get-SPServiceContext
$userProfileConfigManager = New-Object Microsoft.Office.Server.UserProfiles.
UserProfileConfigManager($serviceContext)
$userProfilePropertyManager = $userProfileConfigManager.ProfilePropertyManager
$userProfilePropertyManager = $userProfilePropertyManager.GetCoreProperties()
$userProfileTypeProperties = $userProfilePropertyManager.GetProfileTypeProperties
([Microsoft.Office.Server.UserProfiles.ProfileType]::User)
$userProfileSubTypeManager = [Microsoft.Office.Server.UserProfiles.
ProfileSubTypeManager]::Get($serviceContext)
$userProfile = $userProfileSubTypeManager.GetProfileSubtype
([Microsoft.Office.Server.UserProfiles.ProfileSubtypeManager]::GetDefaultProfileName
([Microsoft.Office.Server.UserProfiles.ProfileType]::User))
$userProfileProperties = $userProfile.Properties
#Set Custom Property values
$PropertyName = "MyProperty"
$PropertyDisplayName = "MyCustomProperty"
$Privacy="private"
$PrivacyPolicy="mandatory"
$coreProperty = $userProfilePropertyManager.Create($false)
$coreProperty.Name = $PropertyName
$coreProperty.DisplayName = $PropertyDisplayName
$coreProperty.Type = "string"
$coreProperty.Length = "50"
#Add Custom Property
$userProfilePropertyManager.Add($coreProperty)
$profileTypeProperty = $userProfileTypeProperties.Create($coreProperty)
#Display Settings
#Show on the Edit Details page
$profileTypeProperty.IsVisibleOnEditor = $true
#Show in the profile properties section of the user's profile page
$profileTypeProperty.IsVisibleOnViewer = $true
#Show updates to the property in newsfeed
$profileTypeProperty.IsEventLog = $true
$userProfileTypeProperties.Add($profileTypeProperty)
$profileSubTypeProperty = $userProfileProperties.Create($profileTypeProperty)
$profileSubTypeProperty.DefaultPrivacy =[Microsoft.Office.Server.UserProfiles.Privacy]
::$Privacy
$profileSubTypeProperty.PrivacyPolicy =
[Microsoft.Office.Server.UserProfiles.PrivacyPolicy]::$PrivacyPolicy
$userProfileProperties.Add($profileSubTypeProperty)
#Add New Mapping for synchronization user profile data
#SharePoint Synchronization connection
$connectionName ="connectionname"
#Attribute name in FIM/LDAP source
$attributeName ="attributename"
$synchConnection = $userProfileConfigManager.ConnectionManager[$connectionName]
$synchConnection.PropertyMapping.AddNewMapping
([Microsoft.Office.Server.UserProfiles.ProfileType]::User,$PropertyName,$attributeName)
Privacy is an Enum, which has these values,
Privacy Member Name |
Description |
Public |
Everyone |
Contacts |
Colleagues |
Organization |
Workgroup |
Manager |
Manager and me |
Private |
Me |
NotSet |
Not set |
PrivacyPolicy is an Enum, which has these values,
Privacy Policy Name |
Description |
Mandatory |
Makes it a requirement that the user fill in a value. |
OptIn |
Opt-in to provide a privacy policy value for a property. |
OptOut |
Opt-out from providing a privacy policy value for a property. |
Disabled |
Turns off the feature and hides all related user interface |
Setting Core Properties - https://msdn.microsoft.com/en-us/library/ee578663.aspx
Add New Mapping - https://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.propertymapcollection.addnewmapping.aspx
Comments
Anonymous
September 17, 2011
Feel free to post this on the Microsoft ScriptCenter Repository so that others can find it easily.gallery.technet.microsoft.com/scriptcenterAnonymous
July 08, 2014
$profileTypeProperty = $userProfileTypeProperties.Create($coreProperty) throwing null object error on SP 2013.Anonymous
July 08, 2014
Exception Message:You cannot call a method on a null-valued expression.At E:SudarshanUser ProfileMoodys_UPA_CustomeProperties.ps1:57 char:1$profileTypeProperty = $userProfileTypeProperties.Create($coreProperty)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNullAnonymous
July 08, 2014
RESOLVED ALL THE ISSUES EXCEPT:Return zero connection //$userProfileConfigManager.ConnectionManager.count is zero$synchConnection = $userProfileConfigManager.ConnectionManager[$connectionName]