Пользователи в любом домене в доверенном лесу получают не найдено точное совпадение Люди ошибка средства выбора

Исходный номер базы знаний: 2874332

Симптомы

Предположим, что вы настраиваете отношения доверия между двумя лесами Active Directory и что служба имен Интернета Windows (WINS) не включена для разрешения NetBIOS. В этой ситуации средство выбора Люди на сайте Microsoft SharePoint Server 2010 отлично подходит для пользователей в локальном лесу. Однако для пользователей в любом домене в доверенном лесу средство выбора Люди не работает.

Кроме того, средство выбора Люди находит учетную запись пользователя и, кажется, разрешает ее. Однако, когда пользователь нажимает кнопку ОК для отправки обратно на сайт, пользователь получает следующее сообщение об ошибке:

Точное совпадение найдено не было. Щелкните элементы, которые не были разрешены для получения дополнительных параметров.

При запуске NLtest /dsgetdcпоявляется аналогичное сообщение об ошибке. Например, при запуске NLtest /dsgetdc:ExternalContosoпоявляется следующее сообщение об ошибке:

Не удалось получить имя контроллера домена: Состояние = 1355 0x54b ERROR_NO_SUCH_DOMAIN

В журналах единой системы ведения журнала (ULS) вы найдете ошибки, похожие на следующие:

w3wp.exe (0x0E98) 0x1DC4 SharePoint Foundation General 72e1 High Не удается получить DNS домена или dns леса для домена ExternalContoso. ErrorCode=1355

w3wp.exe (0x0E98) 0x1DC4 SharePoint Foundation General 72e9 Средняя ошибка при разрешении пользователя ExternalContoso\UserName: System.ArgumentException: указанное значение не поддерживается для {0} параметра. в Microsoft.SharePoint.Utilities.SPUserUtility.GetDomainControllerToSearch(SPWebApplication webApp, String domainName) в Microsoft.SharePoint.Utilities.SPActiveDirectoryPrincipalBySIDResolver.ResolvePrincipal(String input, Boolean inputIsEmailOnly, области SPPrincipalType, источники SPPrincipalSource, SPUserCollection usersContainer) в Microsoft.SharePoint.Utilities.SPUtility.ResolvePrincipalInternal(SPWeb webApplication webApp, Nullable'1 urlZone, String input, Области SPPrincipalType, источники SPPrincipalSource, spUserCollection usersContainer, boolean inputIsEmailOnly, Boolean alwaysAddWindowsResolver).

Причина

Эта проблема возникает из-за того, что при нажатии кнопки ОК средство выбора Люди выполняет вызов NetBIOS, чтобы попытаться разрешить доменное имя. Так как у клиента не настроен wins, происходит широковещательная трансляция NetBIOS. Однако широковещательная передача не может найти доверенные домены, так как широковещательные трансляции не включены за пределами подсети.

Разрешение

Шаг 1. Скачивание и установка исправления

Вы можете скачать и установить пакет исправлений SharePoint 2687339: август 2012 г.

Примечание.

Если у вас установлен более новый пакет исправлений, выпущенный после 28 августа 2012 г., или если у вас есть SharePoint Server 2010 с пакетом обновления 2 (SP2), вам не нужно устанавливать исправление 2687339.

Шаг 2. Включение исправления

Чтобы использовать средство выбора Люди без включения NETBIOS или WINS, необходимо указать домены, из которых требуется разрешить пользователей с помощью Windows PowerShell явно в каждом веб-приложении.

После установки исправления необходимо задать два свойства, чтобы включить новые функции.

  • $farm.Properties["disable-netbios-dc-resolve"] задано на уровне фермы
  • $wa.PeoplePickerSettings.SearchActiveDirectoryDomains задается на уровне веб-приложения.

В SearchActiveDirectoryDomainsвы создаете сопоставление между netBIOS-именем и DNS-именем каждого домена, который нужно Люди Picker для поиска.

Это означает, что в параметрах выбора Люди необходимо перечислить каждый из доверенных доменов и локальный домен. Нельзя просто указать имя леса, а затем Люди средства выбора разрешают все домены из леса.

С помощью Windows PowerShell можно задать свойства домена на основе следующего примера. Замените заполнители, такие как <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()
# --------------------------------------------------------------------------------------

Примечание.

Чтобы включить исправление, необходимо запустить версию этого примера скрипта для каждого веб-приложения отдельно.

Пример односторонного доверия

Используйте этот пример, только если существует односторонняя доверия с целевым доменом, а у учетной записи пула приложений нет доступа.

Это аналогично приведенному выше примеру с добавлением имени учетной записи и пароля для подключения к односторонному доверенному домену.

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

Обходной путь

Если вы не можете установить исправление или пакет обновления 2 (SP2), вы можете обойти эту проблему, кешируя сведения о разрешении домена для доменного имени NetBIOS в службе Netlogon. Для этого выполните следующие действия:

  1. Создайте пакетный файл, содержащий следующие команды для каждого внешнего домена:

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

    Например, создайте следующий пакетный файл:

    Nltest /dsgetdc:external.contoso.com
    Nltest /dsgetdc:external
    Nltest /dsgetdc:domain2.contoso.com
    Nltest /dsgetdc:domain2
    
  2. Запускайте этот пакетный файл в качестве запланированной задачи каждые 15 минут на каждом интерфейсном веб-сервере. Это должно сохранить заполнение кэша Netlogon и предотвратить ошибку.