Användare i alla domäner i den betrodda skogen får Ingen exakt matchning hittades Fel i People Picker

Ursprungligt KB-nummer:   2874332

Symptom

Anta att du konfigurerar ett skogsförtroende mellan två Active Directory-skogar och att Windows Internet Name Service (WINS) inte har aktiverats för NetBIOS-upplösning. I det här fallet fungerar People Picker på en Microsoft SharePoint Server 2010-webbplats bra för användare i den lokala skogen. Men för användare i en domän i en betrodd skog fungerar inte People Picker.

Dessutom hittar People Picker användarkontot och verkar lösa det. Men när användaren klickar på OK för att publicera på webbplatsen får användaren följande felmeddelande:

Ingen exakt matchning hittades. Klicka på objekten som inte löstes för fler alternativ.

Om du kör NLtest /dsgetdc får du ett liknande felmeddelande. Om du till exempel kör NLtest /dsgetdc:ExternalContoso får du följande felmeddelande:

Det gick inte att få DC-namnet: Status = 1355 0x54b ERROR_NO_SUCH_DOMAIN

I ULS-loggarna (Unified Logging System) hittar du fel som liknar följande:

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 för att lösa användaren 'ExternalContoso\UserName': System.ArgumentException: Angivet värde stöds inte för {0} parametern. på Microsoft.SharePoint.Utilities.SPUserUtility.GetDomainControllerToSearch(SPWebApplication webApp, String domainName) på Microsoft.SharePoint.Utilities.SPActiveDirectoryPrincipalBySIDResolver.ResolvePrincipal(String input, Boolean inputIsEmailOnly, SPPrincipalType-omfattningar, SPPrincipalSource-källor, SPUserCollection-användareContainer) på Microsoft.SharePoint.Utilities.SPUtility.ResolvePrincipalInternal(SPWeb-webb, SPWebApplication webApp, Nullable ` 1 urlZone, String-indata, SPPrincipalType-omfattningar, SPPrincipalSource-källor, SPUserCollection-användareContainer, Boolean-indataIsEmailOnly, Boolean alwaysAddWindowsResolver).

Orsak

Det här problemet uppstår eftersom, när du klickar på OK, gör People Picker ett NetBIOS-anrop för att försöka lösa domännamnet. Eftersom kunden inte har WINS konfigurerad sker en NetBIOS-sändning. Sändningen kan dock inte hitta betrodda domäner eftersom sändningar inte är aktiverade utanför undernätet.

Lösning

Steg 1: Ladda ned och installera snabbkorrigeringen

Du kan ladda ned och installera snabbkorrigeringspaketet för SharePoint 2687339: augusti 2012.

Anteckning

Om du har ett nyare snabbkorrigeringspaket installerat som släpptes efter den 28 augusti 2012, eller om du har SharePoint Server 2010 Service Pack 2, behöver du inte installera snabbkorrigering 2687339.

Steg 2: Aktivera snabbkorrigeringen

Om du vill använda People Picker utan NETBIOS eller WINS aktiverat måste du ange de domäner som du vill lösa användare från genom att uttryckligen använda Windows PowerShell i alla webbprogram.

När du har installerat snabbkorrigeringen finns det två egenskaper som du måste ange för att aktivera de nya funktionerna.

  • $farm.Properties["disable-netbios-dc-resolve"] anges på servergruppsnivå
  • $wa.PeoplePickerSettings.SearchActiveDirectoryDomains anges på webbprogramnivå.

I skapar du en mappning mellan NetBIOS-namnet och DNS-namnet för varje domän som du vill SearchActiveDirectoryDomains att Personväljaren ska söka i.

Det innebär att du måste visa var och en av dina betrodda domäner och den lokala domänen i inställningarna för Personväljare. Du kan inte bara ange ett skogsnamn och sedan låt People Picker lösa alla domäner från skogen.

Med hjälp av Windows PowerShell kan du ange domänegenskaperna baserat på följande exempel. Ersätt platshållare, till exempel och domännamnen, med dina egna värden.

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

Anteckning

Du måste köra din version av det här exempelskriptet för varje webbprogram för att aktivera snabbkorrigeringen.

Exempel på envägsförtroende

Använd bara det här exemplet om det finns ett enkelvägsförtroende med måldomänen och programpoolkontot inte har åtkomst.

Det liknar exemplet ovan, med tillägget av att ange ett kontonamn och lösenord för att göra anslutningen till den envägs betrodda domänen.

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

Lösning

Om du inte kan installera snabbkorrigeringen eller Service Pack 2 kan du komma runt det här problemet genom att cachelagra information om domänupplösning för NetBIOS-domännamnet i Netlogon-tjänsten. Gör så här:

  1. Skapa en batchfil som innehåller följande kommandon för varje extern domän:

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

    Skapa till exempel följande batchfil:

    Nltest /dsgetdc:external.contoso.com
    Nltest /dsgetdc:external
    Nltest /dsgetdc:domain2.contoso.com
    Nltest /dsgetdc:domain2
    
  2. Kör den här batchfilen som en schemalagd aktivitet var 15:e minut på varje webbserver. Det bör behålla Netlogon-cachen ifylld och förhindra felet.