Nie mam udokumentowanego mechanizmu, o którym wiem, że mógłby zmienić domyślny sufiks UPN wybierany przez użytkowników i komputery usługi Active Directory. Wydaje mi się, że narzędzie ma stałe połączenie z pierwszą częścią atrybutu „canonicalName” zdefiniowanego w obiekcie „crossRef” dla domeny określonej w „CN = partycje, CN = konfiguracja ...” w twoim lesie.
Użytkownicy i komputery AD są po prostu podłączeni do tego celu. Jeśli utworzysz konta użytkowników przy użyciu innych środków (na przykład „NET USER ... / add”), wówczas do konta nie zostanie przypisany żaden atrybut userPrincipalName. Domyślny sufiks UPN jest tak naprawdę tylko domyślny dla użytkowników i komputerów AD, a nie domyślny samej usługi katalogowej.
Jeśli natrafisz na artykuł Microsoft KB ze skryptem, który pokazuje, jak programowo uzyskać domyślny sufiks UPN ( http://support.microsoft.com/default.aspx?scid=kb;en-us;Q269441 ), Uwaga: skrypt zawiera kilka błędów składniowych (wiersze 17 i 32 są zniekształcone, a srrNamingContext w wierszu 32 powinien mieć postać strNamingContext). Na końcu tego postu dołączę poprawioną wersję z drobną poprawką (pokazuje nazwy poszczególnych jednostek organizacyjnych, w których można zdefiniować dodatkowe sufiksy UPN).
Chciałbym być poprawiony przez kogoś bardziej „znającego się na mnie” niż ja, ale nie widzę żadnego sposobu, aby użytkownicy i komputery AD działali inaczej.
' --- Get the naming contexts ----
Set RootDSE = GetObject("LDAP://RootDSE")
strNamingContext = RootDSE.Get("defaultNamingContext")
strConfigContext = RootDSE.Get("configurationNamingContext")
' -- Get the current domain name --
Set oDomain = GetObject("LDAP://" + strNamingContext)
strDomainName = oDomain.Get("name")
Set oPartition = GetObject("LDAP://CN=Partitions," & strConfigContext)
'-- Get the DNS name of the domain --
oDomain.GetInfoEx Array("canonicalName"), 0
strCanonical = oDomain.Get("canonicalName")
strDNSName = Left(strCanonical, Len(strCanonical) - 1) 'clip off "/"
'-- Display the default UPN suffix
wscript.echo strDNSName
'-- Get the defined upnSuffixes --
suffixes = oPartition.GetEx("UPNSuffixes")
For Each upnSuffix In suffixes
wscript.echo upnSuffix
Next
Set RootDSE = Nothing
Set oDomain =Nothing
Set oPartition = Nothing
' -- Get the upnsuffixes defined on organizational units --
Set ADOconn = CreateObject("ADODB.Connection")
Set ADOcom = CreateObject("ADODB.Command")
ADOconn.Provider = "ADsDSOObject"
bstrADOQueryString = "<LDAP://" + strNamingContext + ">;(objectcategory=organizationalUnit);upnsuffixes,ADsPath;subtree"
wscript.echo bstrADOQueryString
ADOconn.Open
ADOcom.ActiveConnection = ADOconn
ADOcom.CommandText = bstrADOQueryString
ADOcom.Properties("Page Size") = 99
Set objRS = ADOcom.Execute
While Not objRS.EOF
If Not IsNull(objRS.Fields("upnSuffixes")) Then
upnsuffixes = objRS.Fields("upnSuffixes")
For Each upnsuffix In upnsuffixes
wscript.echo objRS.Fields("adsPath") & " - Suffix: " & upnsuffix
Next
End If
objRS.MoveNext
Wend
Set objRS = Nothing
Set ADOcom = Nothing
Set ADOconn = Nothing