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:
Eigenschaftenname |
Beschreibung |
Konfiguriert den Timeoutwert zum Ausstellen einer Abfrage für Active Directory. |
|
Schränkt die Suche in einer Verteilerliste auf bestimmte Domänen ein. |
|
Peoplepicker-nowindowsaccountsfornonwindowsauthenticationmode |
Gibt an, dass Active Directory nicht durchsucht werden soll, wenn für den aktuellen Port die formularbasierte Authentifizierung verwendet wird. |
Zeigt nur Benutzer an, die Mitglieder der Websitesammlung sind. |
|
Ermöglicht dem Administrator das Festlegen der benutzerdefinierten Abfrage, die an Active Directory gesendet wird. |
|
Ermöglicht einem Benutzer die Suche in einer zweiten unidirektional vertrauenswürdigen Gesamtstruktur oder Domäne. |
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!
Hallo Marek,
vielen Dank für Deinen Beitrag. Nach einer Lösung für die langen Suchzeiten von Usern habe ich schon sehr lange gesucht und werde jetzt erstmal testen!!
bin neugerig, ob es auch in Deinem Szenario hilft…warte auf Feedback