​Hallo zusammen!

Wiedereinmal ein Szenario, das einfach klingt, aber garnicht mal so trivial ist (oder zumindest mit der SharePoint oberfläche extrem lästig):

Wir haben in unserem Benutzerprofildienst weitere Profileigenschaften hinzugefügt (z.B. eine private Handynummer). Diese haben sich bei der Erstellung in die “Benutzerdefinierten Eigenschaften” eingenistet. Wir hätten die Handynummer aber viel lieber bei den Kontaktinformationen!

Handynummer.PNG 

Glücklicherweise hat Microsoft uns hier diese keinen Pfeile zur Sortierung spendiert. Diese wunderbaren Pfeile Schieben das ausgewählte Element genau eine Stelle nach oben und laden im Anschluss die Seite komplett neu. Gut. Das kann man ein paar mal machen, aber spätestens nach dem 10. mal bekommt man unwillkürlich die Einsicht, dass die alte Position vieleicht doch garnicht mal so schlecht war…

Erschwerend kommt hinzu, das sich die Eigenschaften an manchen Stellen einfach nicht mehr verschieben lassen. Man klickt auf den Pfeil, die Seite lädt neu, nix passiert.

Man könnte an dieser Stelle aufgeben und sich mit dem zufrieden geben was einem jetzt gebliebenm ist: Default-Benutzerzerprofileigenschaften und ein kleiner Zoo von wild zusammengewürfelten “Benutzerdefinierten Eigenschaften” oder…

wir nutzen die Power Shell!

Leider ist es hier jedoch nicht mit einem Einzeiler getan und wir müssen etwas tiefer in die Trickkiste greifen:

Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue
 $mys = Get-SPSite http://mysite
 $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)
 $profileSubtypePropManager.SetDisplayOrderByPropertyName(“HandyNummerPrivat”,5113)
 $profileSubtypePropManager.CommitDisplayOrder()

Der interessante Teil findet sich in der vorletzten Zeile: 

$profileSubtypePropManager.SetDisplayOrderByPropertyName(“PrivateHandyNummer“,5113)

 Mit diesem Befehl wird angegeben welches Property( interner Name, hier grün) an welcher Stelle (orange) einsortiert werden soll. Diese Zeile kann nach bedarf auch mehrmals vorkommen, so das wir mit einem start des Skriptes direkt mehrere Properties umsortieren.

 

Der interne Name sollte bekannt sein, da dieser bei der Property-Erstellung angegebenw erden musste, bzw lässt sich dieser leicht über die Eigenschaften auslesen:

InternalName.PNG 

 Bei der Sortierungsnummer ist wieder ein wenig Powershell gefragt:

Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue
$site = Get-SPSite http://mysite
$context = Get-SPServiceContext $site
$upConfigManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileConfigManager($context)
$profilePropertyManager = $upConfigManager.get_ProfilePropertyManager()
$pspm = $upConfigManager.GetProperties()
$pspm | Export-CSV c:PropertyList.csv
$site.Dispose() 

Dieses kleine Skript erzeugt uns eine Liste mit allen userproperties. Diese kann in Excel geöffnet werden und nach einer kleinen Umformatierung(Werte müssen am Komma getrennt werden(wie unerwartet bei einer .csv-Datei)) findet sich der gesuchte Wert in der Spalte “Display Order”.

Wert raussuchen, ins Reorder-Skript einsetzen, Skript abschicken, glücklich sein, weil man sich einen haufen Klicks erspart hat.

 

In diesem Sinne: Bis denn dann und viel Spaß 🙂