Posts mit dem Label User Profile Service werden angezeigt. Alle Posts anzeigen
Posts mit dem Label User Profile Service werden angezeigt. Alle Posts anzeigen

Samstag, 19. Februar 2011

User Properties mit PowerShell anlegen und bearbeiten

Aus der Not geboren ( Die Not hat den Namen "CU December" und ich habe mich in diesem Post schon darüber ausgeheult :-) ) habe ich mich damit beschäftigt, wie man denn eigene User Properties in User Profiles automatisch befüllen und erstellen kann. Als Nicht- Developer und Admin denke ich dabei natürlich immer zuerst an die PowerShell! Dumm nur dass Microsoft offensichtlich vergessen hat uns dafür die nötigen Befehle direkt für die PowerShell einzupacken. Seltsam, da sich sicher jeder, der schon einmal die überwältigend träge, hässliche, langsame und undhandliche Maske zum administrieren der User Properties in SharePoint noch nie sehnlicher ein Power Shell- Skript gewünscht hat.
User Property Administration - ein Administrations-Alptraum wie aus den frühen 90ern.

Wir müssen uns des Objektmodells bedienen, um diese Eigenschaften über die PowerShell verwalten zu können. Die benötigte Klasse hierfür ist UserProfilManager ( http://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.userprofilemanager.aspx ).
Bauen wir uns also ein Skript, beginnen wir mit dem laden der SharePoint cmdlets und dem erstellen eines UserProfileManager-Objekts. Dieses Objekt beinhaltet alle Profile und Properties aus der Service Application, die im Kontext der angegebenen Seite verwendet wird.

  1. # Load Sharepoint SnapIn      
  2. if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null)      
  3. {      
  4.     Add-PSSnapin Microsoft.SharePoint.PowerShell      
  5. }     
  6.     
  7. # Create Service Context      
  8. $site = Get-SPSite http://mySiteHostUrl      
  9. $serviceContext = Get-SPServiceContext $site     
  10.     
  11. # Get ProfileManager, User Profiles and User Properties      
  12. $profileManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($serviceContext)      
  13. $userProfiles = $profileManager.GetEnumerator()      
  14. $properties = $profileManager.get_Properties()   
Nun haben wir eigentlich alles was wir dazu benötigen, neue User Properties anzulegen und bestehende Profile zu befüllen. Neue User Properties kann man wie folgt anlegen:
  1. # Create new Property   
  2. [Microsoft.Office.Server.UserProfiles.Property]$property = $properties.Create($false)   
  3. # Set property vaules   
  4. $property.set_Name("Property Name")   
  5. $property.set_Description("Property Description")   
  6. $property.set_DisplayName("Property Displayname")   
  7. $property.set_IsUserEditable($true)   
  8. $property.set_IsVisibleOnEditor($true)   
  9. $property.set_IsVisibleOnViewer($true)   
  10. $property.set_Type(String)   
  11. $property.set_Length(255)   
  12. # set other values you need...   
  13. $property.Commit()   
  14. # Add new Property to Repository   
  15. $properties.Add($property)  
Denkbar einfach, so eine property anzulegen, wenn man erstmal ein ProfileManagerObjekt hat. Das wichtigste hierbei ist eigentlich, den richtigen Typ ( set_Type() ) zu wählen ( String, Multi Value, etc...). Fast noch einfacher ist es dann, das User Property für jedes Profil befüllen zu lassen.

  1. foreach($userProfile in $userProfiles)   
  2. {   
  3.     # Set New Value   
  4.     $userProfile["Property Name"].Add("New Value")   
  5.     $userProfile.Commit()   
  6. }  
Ein solches Skript, vielleicht noch ein geplanter Windows Task und dazu die nötige Phantasie sollten eigentlich eine nützliche Lösung ergeben können :-) Viel Spaß damit!

Good luck,

Andreas


Mittwoch, 16. Februar 2011

CU Dezember, NetBiosEnabled, User Profile Sync und MIISRCW: System.NullReferenceExeption <- Neue Erkenntnisse

SOLVED WITH
CU FEBRURARY 20100



Na, NetBiosName unterschiedlich vom FQDN? Benutzerprofilsynchronisations-Dienstanwendung für den Import des NetBios Names aktiviert? Aktuell CU December installiert? Neue Import Connection notwendig? Pech gehabt! :-) Seit CU December dankt SharePoint das mit der Meldung Unable to process Create message ( oder Unable to process Put message wenn man versucht, eine bestehende Verbindung zu ändern ). Im Event Log sieht man dann eine Event ID 3:


ERROR:
"Unable to process create message"
EVENT LOG:
Forefront Identity Manager: Event ID 3
----------------------------------------------
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Calibri}
MIISRCW: System.NullReferenceException: Object reference not set to an instance of an object.
   at MIISRCW.IMMSMAUtility.UIGetData(String pszRequestInformation, Int32& pfSuccess, String& ppszResult)
   at Microsoft.ResourceManagement.SyncConfig.TryGetSchema(String maType, String initializationString, String& returnString)
   at Microsoft.ResourceManagement.ActionProcessor.SyncConfigActionProcessor.Create(String typeName, IList`1 createParameters, Guid creator, Guid cause)
   at Microsoft.ResourceManagement.ActionProcessor.SyncConfigActionProcessor.ProcessInputRequest(RequestType request)
   at Microsoft.ResourceManagement.ActionProcessor.ActionDispatcher.ProcessInputRequest(RequestType request)
   at Microsoft.ResourceManagement.WebServices.RequestDispatcher.ExecuteAction(RequestType request)
   at Microsoft.ResourceManagement.WebServices.RequestDispatcher.ExecuteAction[ResponseBodyType](RequestType request)
   at Microsoft.ResourceManagement.WebServices.RequestDispatcher.DispatchRequest[ResponseBodyType](RequestType request, Guid requestIdentifier, Object redispatchSingleInstanceKey)
   at Microsoft.ResourceManagement.WebServices.RequestDispatcher.DispatchRequest[ResponseBodyType](RequestType request)
   at Microsoft.ResourceManagement.WebServices.ResourceManagementService.Create(Message request)
Na, da bleibt wohl nur das hoffen auf das nächste CU oder SP ( lt. diesem Forenverlauf stehts sogar seit 14. Februar auf der Liste von MS http://social.technet.microsoft.com/Forums/en/sharepoint2010setup/thread/e08b9564-05c0-4791-b8a2-e589834c4b7c ). Obwohl, langsam schleicht sich so ein unangenehmes Gefühl beim einspielen ein....

Good luck und immer auf dem neusten Patch-Level bleiben, höhöhö,


Andreas


P.S.: Wer nun wegen Terminen doch ne schnelle Lösung braucht: Wenn man den Account Name im Profil manuell ändert, wird er beim inkrementellen Import nicht mehr geändert...