Seit Monaten habe ich eine Lösung für ein Problem mit dem PeoplePicker gesucht. Wir haben einen eigenen Form Authentification Provider auf Basis einer SQL DB erstellt. Leider versucht SharePoint standardmäßig an dieser Stelle die SID vom User im AD aufzulösen, obwohl es keine Active Directory Account waren. Das führte dazu, dass zwar der User recht schnell gefunden wurde, danach aber es bis zu 3 Minuten gedauert hat, bis SharePoint festgestellt hat, dass der Account in AD nicht existiert. Bei dem Kunden handelt es sich um eine sehr große Landschaft mit über 400.000 Account in vielen Domains.
Es existiert eine nicht dokumentierte Einstellung für den PeoplePicker, die es SharePoint dazu bringt, nur für domain\account, also nur bei Account mit einem Backslash ( \ ) die Funktion TranslateToSids aufzurufen.
System.Security.Principal.NTAccount.TranslateToSids(System.Security.Principal.IdentityReferenceCollection, Boolean ByRef
Das Verhalten vom PeoplePicker kann über stsadm konfiguriert werden. Leider keiner der Parameter hat das gewünschte Verhalten konfigurieren können:
Quelle: http://technet.microsoft.com/de-de/library/cc263318(office.12).aspx
http://blogs.msdn.com/b/sharepoint/archive/2006/03/15/552331.aspx
Die Rettung kam dann vom Russmax-Blog. Er hat eine Einstellung gefunden, die das Verhalten für alle nicht domain\account entsprechend verändert.
Es lässt sich per PowerShell anpassen:
[System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SharePoint”)
$site = new-object -typename Microsoft.SharePoint.SPSite(“http://url-of-your-site”)
$site.WebApplication.PeoplePickerSettings
$ps=$site.WebApplication.PeoplePickerSettings
$wa=$site.WebApplication
$ps.ActiveDirectoryRestrictIsolatedNameLevel=$true;
$wa.Update();
Und es funktioniert jetzt richtig schnell!