Les utilisateurs de n’importe quel domaine de la forêt approuvée reçoivent Aucune correspondance exacte n’a été trouvée Personnes erreur du sélecteur

Numéro de la base de connaissances d’origine : 2874332

Symptômes

Supposons que vous configurez une approbation de forêt entre deux forêts Active Directory et que windows Internet Name Service (WINS) n’est pas activé pour la résolution NetBIOS. Dans ce cas, Personnes sélecteur dans un site Microsoft SharePoint Server 2010 fonctionne correctement pour les utilisateurs de la forêt locale. Toutefois, pour les utilisateurs de n’importe quel domaine de la forêt approuvée, Personnes Sélecteur ne fonctionne pas.

En outre, Personnes Sélecteur trouve le compte d’utilisateur et semble le résoudre. Toutefois, lorsque l’utilisateur clique sur OK pour publier de nouveau sur le site, l’utilisateur 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 plus d’options.

Si vous exécutez NLtest /dsgetdc, 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 du contrôleur de domaine : État = 1355 0x54b ERROR_NO_SUCH_DOMAIN

Dans les journaux du système de journalisation unifié (ULS), 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 Général 72e9 Erreur moyenne lors de la résolution de l’utilisateur « ExternalContoso\UserName » : System.ArgumentException : La valeur spécifiée n’est pas prise en charge pour le {0} paramètre. sur Microsoft.SharePoint.Utilities.SPUserUtility.GetDomainControllerToSearch(SPWebApplication webApp, String domainName) sur Microsoft.SharePoint.Utilities.SPActiveDirectoryPrincipalBySIDResolver.ResolvePrincipal(String input, Boolean inputIsEmailOnly, SPPrincipalType scopes, SPPrincipalSource sources, SPUserCollection usersContainer) à l’adresse Microsoft.SharePoint.Utilities.SPUtility.ResolvePrincipalInternal(SPWeb web, SPWebApplication webApp, Nullable'1 urlZone, String input, Étendues SPPrincipalType, sources SPPrincipalSource, utilisateurs SPUserCollectionContainer, Entrée booléenneIsEmailOnly, Boolean alwaysAddWindowsResolver).

Cause

Ce problème se produit car, lorsque vous cliquez sur OK, Personnes Sélecteur effectue un appel NetBIOS pour essayer de résoudre le nom de domaine. Étant donné que le client n’a pas configuré WINS, une diffusion NetBIOS se produit. Toutefois, la diffusion ne peut pas trouver les domaines approuvés, 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 correctif logiciel SharePoint 2687339 : août 2012.

Remarque

Si vous avez installé un package de correctif logiciel plus récent 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 logiciel 2687339.

Étape 2 : Activer le correctif logiciel

Pour utiliser Personnes Sélecteur sans QUE NETBIOS ou WINS soit activé, vous devez spécifier les domaines à partir desquels vous souhaitez résoudre les utilisateurs en utilisant 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éfini au niveau de la batterie de serveurs
  • $wa.PeoplePickerSettings.SearchActiveDirectoryDomains est défini au niveau de l’application web.

Dans SearchActiveDirectoryDomains, vous créez un mappage entre le nom NetBIOS et le nom DNS de chaque domaine que vous souhaitez rechercher Personnes Sélecteur.

Cela signifie que vous devez répertorier chacun de vos domaines approuvés et le domaine local dans les paramètres du sélecteur de Personnes. Vous ne pouvez pas simplement spécifier un nom de forêt, puis avoir Personnes Sélecteur pour résoudre tous les domaines de la forêt.

À l’aide de Windows PowerShell, vous pouvez définir les propriétés de domaine en fonction de l’exemple suivant. Remplacez les espaces réservés tels que <YourWebApplicationURL> et les noms de domaine par vos propres valeurs.

# --------------------------------------------------------------------------------------
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()
# --------------------------------------------------------------------------------------

Remarque

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

Exemple d’approbation unidirectionnelle

Utilisez cet exemple uniquement s’il existe une approbation unidirectionnelle avec le domaine cible et si le compte du pool d’applications n’a pas accès.

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

# --------------------------------------------------------------------------------------
# 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 mettant en cache 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 qui contient les commandes suivantes pour chaque domaine externe :

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

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

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