What in the User Profile Service Application is going on here?
While working with PowerShell to build out Service Applications, I managed to get my test farm into a state where I no longer had a User Profile Service Application, but the user profile timer jobs were still around.
Trying to create a new User Profile Service Application would result in the following :
New-SPProfileServiceApplication : An object of the type Microsoft.Office.Server.ActivityFeed.ActivityFeedUPAJob named "User Profiles_ActivityFeedJob" already exists under the parent Microsoft.Office.Server.Administration.UserProfileService named "". Rename your object or delete the existing object.
At line:1 char:32
+ New-SPProfileServiceApplication <<<< -Name "User Profiles" -ApplicationPool (Get-SPServiceApplicationPool "SharePoint Services Default") -ProfileDBName "UserProfile_Profiles" -ProfileDBServer "Jorman-SQL-02" -ProfileSyncDBName "UserProfile_Sync" -ProfileSyncDBServer "Jorman-SQL-02" -SocialDBName "UserProfile_Social" -SocialDBServer "Jorman-SQL-02"
+ CategoryInfo : InvalidData: (Microsoft.Offic...viceApplication:SPCmdletNewProfileServiceApplication) [New-SPProfileServiceApplication], SPDuplicateObjectException
+ FullyQualifiedErrorId : Microsoft.Office.Server.UserProfiles.PowerShell.SPCmdletNewProfileServiceApplication
Trying to get to the Timer Job Definition page in Central Admin would return the following error. Entry is from the SharePoint trace logs, but the message was displayed in the popup dialog on the page. Notice in the stack, that we’re getting the UserProfileApplicationJob when the exception is thrown.
2/08/2011 19:36:41.02 w3wp.exe (0x1AE0) 0x0E18 SharePoint Foundation Runtime tkau Unexpected
System.InvalidOperationException: Operation is not valid due to the current state of the object.
at Microsoft.Office.Server.Administration.UserProfileApplicationJob.get_UserProfileApplication() at Microsoft.Office.Server.Administration.UserProfileApplicationJob.get_DisplayName()
at Microsoft.SharePoint.ApplicationPages.JobDefinitionsDataSourceView.AddRow(SPJobDefinition jd, DataTable table, DataSourceSelectArguments selectArguments)
at Microsoft.SharePoint.ApplicationPages.JobDefinitionsDataSourceView.AddService(SPService service, DataTable table, DataSourceSelectArguments selectArguments)
at Microsoft.SharePoint.ApplicationPages.JobDefinitionsDataSourceView.AddFarm(SPFarm farm, DataTable table, DataSourceSelectArguments selectArguments)
at Microsoft.SharePoint.WebControls.TimerJobDataSourceView.FillDataTable(DataTable table, DataSourceSelectArguments selectArguments)
at Microsoft.SharePoint.WebControls.DataTableDataSourceView.Select(DataSourceSelectArguments selectArguments)
at Microsoft.SharePoint.WebControls.AdministrationDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments)
at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
at System.Web.UI.WebControls.DataBoundControl.PerformSelect() at System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound()
at System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() at System.Web.UI.Control.EnsureChildControls()
At this point, I need to delete some Timer Job Definitions, but I can’t get to Job Definition page in Central Admin to see what jobs are still in the configuration. This left me going back to PowerShell to do the cleanup. I started with running Get-SPTimerJob. This dumps out all the job definitions in the configuration. I could see the “User Profiles_ActivityFeedJob” definition mentioned in my PowerShell error. I also noticed there were 9 other Timer Jobs that started with “User Profiles”. In order to delete them all, I ran the following :
get-sptimerjob | where {$_.Name -match "User Profile"} | %{$_.Delete()}
This grabs all the Timer Jobs that have a name like “User Profile”, then calls Delete on the definition. Once I ran the above, I was able to provision my User Profile Service Application as well as get back into the Review Job Definitions page in Central Admin.
Comments
Anonymous
May 08, 2011
This article solved my problem, thanks a lot!Anonymous
September 16, 2011
My exact problem, exact error message and absolutely the right soltuion. Thanks for sharing.Anonymous
October 14, 2011
I'm not able to delete the corrupted UPS, its status is showing as "Stopping" all the time and I have tried the Powershell console also it just freezes. Give me some pointer what i'm missing.Anonymous
October 18, 2011
You can only start a service that is in the Stopped stated. You'll need to get the service stopped, before you try starting it again. This forum post has some suggestions on getting the service instance to show stopped. social.technet.microsoft.com/.../6d1b123a-391b-4e9e-946d-c23027192e62Anonymous
May 22, 2012
Thanks for your post. I am not sure why they leave job definitions when the service application is delete. Anyway, your post saved my day!Anonymous
December 04, 2012
I had exactly the same issue and thanks for sharing the solution! BTW nice post title :-)Anonymous
September 10, 2013
The original error can be caused by attempting to set up 2013 UPA without Machine admin access as I have found out - creates the timer job but no UPA .Anonymous
November 06, 2014
Thank you very much! Solved my problem as well.Anonymous
December 16, 2014
Thank you very much! Solved my problem as well