Les utilisateurs de n’importe quel domaine de la forêt de confiance ne reçoivent aucune correspondance exacte qui a été trouvée erreur du s picker de personnes

Numéro de la ko d’origine :   2874332

Symptômes

Supposons que vous configuriez une relation d’confiance de forêt entre deux forêts Active Directory et que le service WINS (Windows Internet Name Service) n’est pas activé pour la résolution NetBIOS. Dans ce cas, le s picker de personnes dans un site Microsoft SharePoint Server 2010 fonctionne bien pour les utilisateurs de la forêt locale. Toutefois, pour les utilisateurs de n’importe quel domaine de la forêt de confiance, le s picker de personnes ne fonctionne pas.

En outre, le s sélectionneur de personnes trouve le compte d’utilisateur et semble le résoudre. Toutefois, lorsque l’utilisateur clique sur OK pour revenir sur le site, il reçoit le message d’erreur suivant :

Aucune correspondance exacte n’a été trouvée. Cliquez sur les éléments qui n’ont pas été résolus pour d’autres options.

Si vous NLtest /dsgetdc exécutez , vous recevez un message d’erreur similaire. Par exemple, si vous exécutez NLtest /dsgetdc:ExternalContoso , vous recevez le message d’erreur suivant :

Échec de l’obtention du nom de dc : État = 1355 0x54b ERROR_NO_SUCH_DOMAIN

Dans les journaux ULS (Unified Logging System), vous trouvez des erreurs qui ressemblent à ce qui suit :

w3wp.exe (0x0E98) 0x1DC4 SharePoint Foundation General 72e1 High Unable to get domain DNS or forest DNS for domain ExternalContoso. ErrorCode=1355

w3wp.exe (0x0E98) 0x1DC4 SharePoint Foundation General 72e9 Medium Error in resolving user 'ExternalContoso\UserName' : System.ArgumentException: Specified value is not supported for the {0} parameter. at Microsoft.SharePoint.Utilities.SPUserUtility.GetDomainControllerToSearch(SPWebApplication webApp, String domainName) at Microsoft.SharePoint.Utilities.SPActiveDirectoryPrincipalBySIDResolver.ResolvePrincipal(String input, Boolean inputIsEmailOnly, SPPrincipalType scopes, Sources SPPrincipalSource, SPUserCollection usersContainer) at Microsoft.SharePoint.Utilities.SPUtility.ResolvePrincipalInternal(SPWeb web, SPWebApplication webApp, Nullable ` 1 urlZone, String input, SPPrincipalType scopes, SPPrincipalSource sources, SPUserCollection usersContainer, Boolean inputIsEmailOnly, Boolean alwaysAddWindowsResolverver).

Cause

Ce problème se produit car, lorsque vous cliquez sur OK, le s picker de personnes effectue un appel NetBIOS pour essayer de résoudre le nom de domaine. Étant donné que wins n’est pas installé sur le client, une diffusion NetBIOS se produit. Toutefois, la diffusion ne peut pas trouver les domaines de confiance, car les diffusions ne sont pas activées en dehors du sous-réseau.

Résolution

Étape 1 : Télécharger et installer le correctif logiciel

Vous pouvez télécharger et installer le package de correctifs SharePoint 2687339 : août 2012.

Notes

Si vous avez installé un nouveau package de correctifs qui a été publié après le 28 août 2012 ou si vous avez SharePoint Server 2010 Service Pack 2, vous n’avez pas besoin d’installer le correctif 2687339.

Étape 2 : Activer le correctif

Pour utiliser le sériateur de personnes sans netBIOS ou WINS activé, vous devez spécifier les domaines à partir des lesquels vous souhaitez résoudre les utilisateurs à l’aide de Windows PowerShell explicitement sur chaque application web.

Après avoir installé le correctif logiciel, vous devez définir deux propriétés pour activer la nouvelle fonctionnalité.

  • $farm.Properties["disable-netbios-dc-resolve"] est définie au niveau de la batterie de serveurs
  • $wa.PeoplePickerSettings.SearchActiveDirectoryDomains est définie au niveau de l’application web.

Dans , vous créez un mappage entre le nom NetBIOS et le nom DNS de chaque domaine que vous souhaitez que le s SearchActiveDirectoryDomains picker de personnes recherche.

Cela signifie que vous devez lister chacun de vos domaines de confiance et le domaine local dans les paramètres du s picker de personnes. Vous ne pouvez pas simplement spécifier un nom de forêt, puis faire en sorte que le s picker de personnes résolve tous les domaines de la forêt.

À l’Windows PowerShell, vous pouvez définir les propriétés du domaine en fonction de l’exemple suivant. Remplacez les espaces vos noms de domaine, tels que yourWebApplicationURL.

# --------------------------------------------------------------------------------------
Add-PSSnapin Microsoft.SharePoint.PowerShell -ea silentlycontinue
# Enable the global setting for the farm. You must do this part only once.
$farm = get-spfarm
$farm.Properties
$farm.Properties["disable-netbios-dc-resolve"] = 'true'
$farm.Properties
$farm.Update()

# --------------------------------------------------------------------------------------
# Set the SearchActiveDirectoryDomains property for a single web application. You should only do this part once per-web application.
# Note: SearchActiveDirectoryDomains is the PowerShell equivelent of peoplepicker-searchadforests
$wa = Get-SPWebApplication [http://](http://m1garand/)
# Save current PP settings to text file in case you need to refer to those
$wa.PeoplePickerSettings.SearchActiveDirectoryDomains | out-file pp_settings_before.txt
# Clear the PP settings.
$wa.PeoplePickerSettings.SearchActiveDirectoryDomains.Clear()

# You must repeat the following example for all the domains for which you want People Picker to work on this particular web application.
# The following is an example of adding three domains from the same forest and one domain from a trusted forest:
# --------------------------------------------------------------------------------------
$newdomain = new-object Microsoft.SharePoint.Administration.SPPeoplePickerSearchActiveDirectoryDomain
$newdomain.DomainName ='oneDomain.corp.contoso.com'; # specify the DNS name
$newdomain.ShortDomainName ='oneDomain'; # Specify the netbios name.
$wa.PeoplePickerSettings.SearchActiveDirectoryDomains.Add($newdomain)

$newdomain2 = new-object Microsoft.SharePoint.Administration.SPPeoplePickerSearchActiveDirectoryDomain
$newdomain2.DomainName ='corp.contoso.com'; # specify the DNS name
$newdomain2.ShortDomainName ='CORP'; # Specify the netbios name.
$wa.PeoplePickerSettings.SearchActiveDirectoryDomains.Add($newdomain2)

$newdomain3 = new-object Microsoft.SharePoint.Administration.SPPeoplePickerSearchActiveDirectoryDomain
$newdomain3.DomainName ='contoso.com'; # specify the DNS name
$newdomain3.ShortDomainName ='CTSO'; # Specify the netbios name.
$wa.PeoplePickerSettings.SearchActiveDirectoryDomains.Add($newdomain3)

$newdomain4 = new-object Microsoft.SharePoint.Administration.SPPeoplePickerSearchActiveDirectoryDomain
$newdomain4.DomainName ='fabrikam.com'; # specify the DNS name
$newdomain4.ShortDomainName ='FAB'; # Specify the netbios name.
$wa.PeoplePickerSettings.SearchActiveDirectoryDomains.Add($newdomain4)
# --------------------------------------------------------------------------------------

# Once you have added all the required domains, save settings for the web app.
$wa.update()
# --------------------------------------------------------------------------------------

Notes

Vous devez exécuter votre version de cet exemple de script pour chaque application web individuellement pour activer le correctif logiciel.

Exemple d’une confiance à sens seul

Utilisez cet exemple uniquement s’il existe une confiance à sens unique avec le domaine cible et que le compte du pool d’applications n’a pas accès.

Il est similaire à l’exemple ci-dessus, avec l’ajout de la spécification d’un nom de compte et d’un mot de passe pour établir la connexion au domaine approuvé à sens unique.

# --------------------------------------------------------------------------------------
# First, you have to run setapppassword on every server in the farm.
# This sets the encryption key that is used with the password that you enter for the account that you specify for $newdomain.loginname
stsadm -o setapppassword -password <password>.
# Where <password> is any string that you want to use as an encryption key.
# This has to be run on every server by using the same value for <password>.

# Now add the one-way trusted domain:
Add-PSSnapin Microsoft.SharePoint.PowerShell -ea silentlycontinue
$wa = Get-SPWebApplication http://<YourWebApplicationURL>
$newdomain = new-object Microsoft.SharePoint.Administration.SPPeoplePickerSearchActiveDirectoryDomain
$newdomain.DomainName =<'oneDomain.corp.contoso.com'>; # specify the DNS name
$newdomain.ShortDomainName =<'oneDomain'>; # Specify the netbios name.
$newdomain.loginname = <'oneDomain\userName'> # Specify an account that has access to the remote domain.
# Do not change anything in the next two lines. It prompts you to enter the password.
[System.Security.SecureString]$secureStringValue = Read-Host "Enter the account password: " -AsSecureString
$newdomain.setpassword($secureStringValue)
$wa.PeoplePickerSettings.SearchActiveDirectoryDomains.Add($newdomain) #Add the on-way trusted domain
$wa.update() #update the web app
# --------------------------------------------------------------------------------------

Solution de contournement

Si vous ne pouvez pas installer le correctif logiciel ou le Service Pack 2, vous pouvez contourner ce problème en achant les informations de résolution de domaine pour le nom de domaine NetBIOS dans le service Netlogon. Pour cela, procédez comme suit :

  1. Créez un fichier de commandes contenant les commandes suivantes pour chaque domaine externe :

    Nltest /dsgetdc:ExternalDomainName.FQDN
    Nltest /dsgetdc:ExternalDomainName
    

    Par exemple, créez le fichier de lots suivant :

    Nltest /dsgetdc:external.contoso.com
    Nltest /dsgetdc:external
    Nltest /dsgetdc:domain2.contoso.com
    Nltest /dsgetdc:domain2
    
  2. Exécutez ce fichier de lots en tant que tâche programmée toutes les 15 minutes sur chaque serveur web frontal. Cela doit maintenir le cache Netlogon rempli et éviter l’erreur.